Real-time profiling uses a signal broadcast mechanism to capture all registered threads, since the SIGALRM delivered by ITIMER_REAL is only sent to the main thread.
This change updates the broadcasting logic to send SIGPROF to trigger the actual stack sampling handler, rather than SIGALRM. This separates the logic for handling the broadcast (SIGALRM handler) from handling the stack collection (always SIGPROF handler). It also helps mitigate #159, since the threads will be receiving SIGPROF rather than SIGALRM, which disrupts time.sleep (It is not a perfect fix because the main thread may still be disrupted, but this seems to be a limitation of setitimer). This also fixes the real_time_threaded test, which is currently marked xfail.
Real-time profiling uses a signal broadcast mechanism to capture all registered threads, since the
SIGALRM
delivered byITIMER_REAL
is only sent to the main thread.This change updates the broadcasting logic to send
SIGPROF
to trigger the actual stack sampling handler, rather thanSIGALRM
. This separates the logic for handling the broadcast (SIGALRM handler) from handling the stack collection (always SIGPROF handler). It also helps mitigate #159, since the threads will be receivingSIGPROF
rather thanSIGALRM
, which disrupts time.sleep (It is not a perfect fix because the main thread may still be disrupted, but this seems to be a limitation of setitimer). This also fixes the real_time_threaded test, which is currently marked xfail.Ref #153 and #204.