I've used this technique with multiple interrupt sources. At the start of the interrupt routine, after saving your context (if necessary), I test all of the interrupts possible, in order of priority, and the first one ON has a goto to the handler code for that specific interrupt. (For very short handlers, you can also use short IFs or Select Case--but this is less readable if the handler code is more than just a few lines.) After these tests, I return from the interrupt... but each interrupt handler ends with a goto the test segment. That way if another interrupt occurs while I'm in a handler, then it is still handled.

Like this psuedo code...

Int_Service:
{save your context if necessary}
Int_Tests:
if Timer1IntActive = IntOn then Timer1Handler
if Timer2IntActive = IntOn then Timer2Handler
{restore context if necessary}
resume

Timer1Handler:
{handle the interrupt & reset it}
goto Int_Tests

Timer2Handler:
{handle the interrupt & reset it}
goto Int_Tests

--but, it does take up a slight bit more code. You could simply resume at the end of each handler, but then you'd have to repeat the context saving code if your interrupts occur at the same time.