And more, as far as standard signal handler is tested for identity, signal.SIG_DFL and _signal.SIG_DFL should be the same object. Current code works only due to coincidence of two circumstances:
1) Small integers are cached in CPython.
2) SIG_DFL and SIG_IGN are small integers on common platforms.
When small integer caching is disabled (NSMALLPOSINTS == NSMALLPOSINTS == 0) or when platform depended macros SIG_DFL and SIG_IGN are not small integers, the signal module will mystically fail.
The simplest way to solve this issue is to backout turning SIG_DFL and SIG_IGN into enums.