From Thibault Genessay, "On Windows, when a process tries to spawn one too many thread,
_beginthreadex() fails but OpenThreads still waits on the startup Block before returning to the caller of OpenThreads::Thread::start(). This causes a deadlock. The return value of _beginthreadex() is actually checked, but after the call to OpenThreads::Block::block() so it is basically useless. Attached is a fix to move the check for the return value of _beginthreadex() before the call to block(), so that start() can return to the caller with a non-zero error code. This solves the problem for me."
This commit is contained in:
parent
0de08dad28
commit
0cf92badba
@ -345,13 +345,13 @@ int Thread::start() {
|
|||||||
|
|
||||||
pd->uniqueId = (int)ID;
|
pd->uniqueId = (int)ID;
|
||||||
|
|
||||||
// wait till the thread has actually started.
|
|
||||||
pd->threadStartedBlock.block();
|
|
||||||
|
|
||||||
if(!pd->tid) {
|
if(!pd->tid) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// wait till the thread has actually started.
|
||||||
|
pd->threadStartedBlock.block();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user