I think whats happening is that ResolveRecoveryConflictWithVirtualXIDs() is failing to abort the open transaction
Btw, ISTM that SIGINT works only for statement cancellation. So if the transaction is in idle state, SIGINT has nothing to cancel and hence also fails to abort the transaction.