mirror of
https://github.com/odin-lang/Odin.git
synced 2025-12-28 17:04:34 +00:00
This was causing deadlocks because: 1. The main thread would `thread.terminate` a running thread 2. `thread.terminate` does not mean termination happens immediately 3. The thread that was terminated would see that the main thread released `print_mutex` and acquire it 4. The worker would execute `fmt.printf` which is a cancellation point 5. Cancellation point reached, cancelled 6. Deadlock because the thread was holding `print_mutex` You would usually solve this with `pthread_cleanup_push` that would release the mutex in case it is cancelled, or use `pthread_setcancelstate` to disable cancellation while the mutex is held. But the real fix is just not using forced termination and using a flag or other mechanism to indicate to the thread it should stop. `thread.terminate` shouldn't even be a thing IMO. It is way to dangerous and if somebody knows what they are doing they can use the core:sys procedures to achieve it. And we certainly shouldn't be using it in the demo as an example.