Long story short: stop-the-world briefly resets SIGSEGV handler to SIG_DFL. This breaks programs that handle and continue after SIGSEGV (namely JVM). See the test and comments for details.
Why did you remove this?
We shouldn't ever run TracerThreadDieCallback() from other threads. It wouldn't work anyway.
I think TracerThreadDieCallback() should check that internal_getpid() == stoptheworld_tracer_pid. If not, just call the old callback.