India were frustrated by Dinesh Chandimal and Angelo Mathews in Delhi on Monday but remain in control of the third Test with a 180-run lead over Sri Lanka at the end of day three.
The tourists started the day on 131-3 with Mathews and Chandimal at the crease, and the duo stubbornly continued to pile on the runs for the fourth wicket.
Mathews (111) brought up his first century since August 2015 before being caught behind off Ravichandran Ashwin, who later moved onto 55 Test scalps for the calendar year, joint-best with Australia spinner Nathan Lyon, who was also among the wickets in Adelaide on Monday.
Chandimal will be back in the middle on day four after reaching stumps on an unbeaten 147, despite receiving little support following the dismissal of Mathews, and Sri Lanka survived until the end of the day to finish on 356-9, chasing India's 536-7 declared.
Mathews reminded everyone of his quality with the bat by producing his first ton since his 110 against the same opponents in Colombo two years ago, although India were guilty of squandering multiple opportunities to end what became a 79.1-over partnership.
An edge to Wriddhiman Saha finally signalled the end of Mathews' innings - the India gloveman succeeding where his team-mates had failed following a number of missed catches.
The wickets tumbled thereafter as Sri Lanka slipped from 317-5 to 356-9 by the close of play, with Sadeera Samarawickrama (33), debutant Roshen Silva (0), Niroshan Dickwella (0), Suranga Lakmal (5) and Lahiru Gamage (1) failing to provide Chandimal with a partner to match Mathews.
Ashwin (3-90) was India's most potent attacking threat but the hosts will have to wait a bit longer for their second turn with the bat, with Chandimal returning to the crease with Lakshan Sandakan (0) on Tuesday.
India lead the three-match series 1-0 after two Tests.