- priority: 5 --> 9
Hello. I have the following set of events:
1. I have a .dll that uses fifo_pool.
2. Pool gets destructed.
2.1. terminate_all_workers (wait_for_all_tasks shutdown policy) notify all workers to quit.
2.2. All workers were already finished with their tasks, so, there's no wait
2.3.1. Worker threads gets notification they should be quit, they clean up and, at the end, they add themselves to the m_terminated_workers collection
2.3.2. Back in terminate_all_workers; m_terminated_workers collection is iterated and all threads there are joined. However, at this point, m_terminated_workers collection IS EMPTY. The sequence was notify all and then no wait, so, threads are ready to be run, but, they are possibly not scheduled yet.
2.4. Pool destructor is done.
3. My dll is unloaded.
4. Worker threads eventually get scheduled and BOOM - process crashes because there's no more code to execute.
Does this explanation makes any sense? Is there a fix for this? Tnx.