Right now `TerminateThread` potentially crashes the entire process, which I think is a bit too much of a broken state?
Not necessarily, TerminateThread is essentially a useless API. Still, if we can avoid the crashes it's preferable, but I don't think returning from the thread function is an improvement, and having to create an extra thread just for that purpose is ugly.