I can't quite work out the logic behind this fix though I get a consistent hang on the worker threads (both my worker threads get stuck on sem_wait() - Line 181) when the semaphore is destroyed before the thread is joined, and the application never exits.
This change resolves this.