Currently success return from SuspendThread() neither guarantees that thread is already suspended nor that it will be suspended at all. E. g, if SuspendThread is racing with thread normal exit, a SIGUSR1 could be queued to the thread for suspend but it reached exit_thread() and disabled signals for final exit before processing it.
Fixes GRIS game showing embedded Mono's garbage collector error on exit. Which error is due to the race between normal thread exit and GC cleanup. GC cleanup (as well as normal operation actually) first tries to suspend all the threads, failure here is fine. But when suspend succeeded it doesn't tolerate the failure to GetThreadContext() a bit later.