Sri Lanka were just five wickets away from a crushing second Test and series victory over New Zealand on Saturday with the tourists 199-5 at stumps on third day, having followed on after collapsing to 88 all out in their first innings.
Tom Blundell was not out 47 and Glenn Phillips on 32 when bad light forced an early end to play in Galle after debutant off-spinner Nishan Peiris took three top-order wickets.
Devon Conway, battling to save both his team and his place in the side, joined forces with former captain Kane Williamson in a dogged 97-run partnership for the second wicket.
De Silva lured Conway, who had made 61 off 62 balls, into a drive towards the vacant deep cover boundary that was caught by Dinesh Chandimal in a spectacular backward running catch.
Williamson, the world's second-ranked batsman behind England's Joe Root, departed when he misjudged a shot off Peiris, with Ramesh Mendis grabbing a tumbling catch at long-on.
Tom Latham had been the first wicket to fall after the follow-on was enforced just before lunch, caught by Pathum Nissanka for a duck at short leg off Peiris, who earlier had taken three first-innings wickets.
Sri Lanka declared Friday on a mammoth 602-5 for in their first innings then spinner Prabath Jayasuriya took 6-42 for his ninth five-wicket haul as the visitors failed to get to three figures.
Jayasuriya will need to dismiss all five remaining New Zealand batsman to equal the record for fastest bowler to 100 Test wickets, held since 1896 by England's George Lohmann who reached the milestone in his 16th Test.
Resuming at a precarious 22-2 in their first innings, New Zealand's batsmen barely put up a fight and their highest partnership was the 20 added by last pair Mitchell Santner, who top scored with 29, and William O'Rourke (two).
Captain de Silva took five catches at first slip to tie the record for most in a Test innings by a non-wicketkeeper, a milestone shared with 15 others.