1.0.25.37: block deferrables when gc pending in PA
Consider this:
set_pseudo_atomic_atomic()
alloc and set pseudo_atomic_interrupted and GC_PENDING
clear_pseudo_atomic_atomic()
if (get_pseudo_atomic_interrupted())
gc();
If an async interrupt happens and unwinds between
clear_pseudo_atomic_atomic and gc() we have lost a gc trigger until
the next alloc. Same with SIG_STOP_FOR_GC instead of alloc.
This patch addresses the above problem by blocking deferrables when a
gc is requested in a pseudo atomic section. On exit from the protected
section there is no race because no async unwinding interrupts can
happen.