Added fix for scenario where module thread waiting for s_mutexModule in acquireGIL can deadlock with module thread waiting for s_mutex in releaseGIL
Former-commit-id: 3205373bb378f895824cc1936a6bae663b1abdcc
This commit is contained in:
parent
cba4dcffdf
commit
363293ef61
@ -5104,7 +5104,14 @@ void moduleAcquireGIL(int fServerThread) {
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
s_mutexModule.lock();
|
// It is possible that another module thread holds the GIL (and s_mutexModule as a result).
|
||||||
|
// When said thread goes to release the GIL, it will wait for s_mutex, which this thread owns.
|
||||||
|
// This thread is however waiting for the GIL (and s_mutexModule) that the other thread owns.
|
||||||
|
// As a result, a deadlock has occured.
|
||||||
|
// We release the lock on s_mutex and wait until we are able to safely acquire the GIL
|
||||||
|
// in order to prevent this deadlock from occuring.
|
||||||
|
while (!s_mutexModule.try_lock())
|
||||||
|
s_cv.wait(lock);
|
||||||
++s_cAcquisitionsModule;
|
++s_cAcquisitionsModule;
|
||||||
fModuleGILWlocked++;
|
fModuleGILWlocked++;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user