Make sure all Mutex ops happen on the same thread

This commit is contained in:
Paul Betts
2014-09-04 12:16:16 -07:00
parent 6bf5d8f5ba
commit 929fabf702

View File

@@ -316,6 +316,7 @@ namespace Squirrel
{
bool HasHandle = false;
Mutex mutex;
EventLoopScheduler scheduler;
public SingleGlobalInstance(string key, int timeOut)
{
@@ -323,12 +324,14 @@ namespace Squirrel
return;
}
scheduler = new EventLoopScheduler();
initMutex(key);
try {
if (timeOut <= 0) {
HasHandle = mutex.WaitOne(Timeout.Infinite, false);
HasHandle = scheduler.Enqueue(() => mutex.WaitOne(Timeout.Infinite, false)).Result;
} else {
HasHandle = mutex.WaitOne(timeOut, false);
HasHandle = scheduler.Enqueue(() => mutex.WaitOne(timeOut, false)).Result;
}
if (HasHandle == false) {
@@ -346,9 +349,11 @@ namespace Squirrel
}
if (HasHandle && mutex != null) {
mutex.ReleaseMutex();
scheduler.Enqueue(() => mutex.ReleaseMutex()).Wait();
HasHandle = false;
}
scheduler.Dispose();
}
~SingleGlobalInstance()