On Sunday, 3 July 2016 at 18:25:32 UTC, tcak wrote:
Well, I actually have found out about the issue, and solved it
a different way.
I put memory limit on the process for testing.
At some point, due to memory limitation, thread.start() method
fails. But, this method cannot recover the system correctly,
and Phobos thinks that thread has been started correctly.
This happens, if I understand correctly, due to the value of
variable "nAboutToStart" in core.thread, line 685. Its value is
increase here, and is decreased by 1 in "add" function on line
1775. When start() fails, add() is not called for it ever, and
thread_joinAll() on line 2271 gets into an endless loop. There
by, the program cannot quit, and loop starts using 100% CPU.
---
What I did to solve this issue is that I created my thread by
using pthread_create() function, and called
thread_attachThis(). This way, problem is prevented.
---
As a solution, when thread creation is failed in start()
method, we should decrease the value of "nAboutToStart" by 1,
but it seems like "pAboutToStart" needs to be touched to
recover the system properly. Fortunately there is not much code
in the start() method.
I suggest you create an issue for this, if you didn't already, so
that it can be fixed.