11 #include <drift/dslcore.h>
15 #include <drift/Mutex.h>
16 #include <drift/Threading.h>
19 DSL_Mutex_Win32CS::DSL_Mutex_Win32CS(
int timeout) {
22 lock_timeout = timeout;
23 memset(&cs, 0,
sizeof(cs));
24 InitializeCriticalSection(&cs);
27 DSL_Mutex_Win32CS::~DSL_Mutex_Win32CS() {
29 DeleteCriticalSection(&cs);
32 bool DSL_Mutex_Win32CS::Lock() {
33 if (lock_timeout >= 0) {
34 return Lock(lock_timeout);
37 EnterCriticalSection(&cs);
38 LockingThreadID = GetCurrentThreadId();
40 if (refcnt <= 0) { refcnt = 1; }
44 bool DSL_Mutex_Win32CS::Lock(
int timeout) {
46 BOOL amIn = TryEnterCriticalSection(&cs);
49 safe_sleep(100,
true);
51 amIn = TryEnterCriticalSection(&cs);
54 printf(
"Timeout while locking mutex! (%p, %p, %d)\n",
this, &cs, GetLastError());
59 LockingThreadID = GetCurrentThreadId();
61 if (refcnt <= 0) { refcnt = 1; }
65 void DSL_Mutex_Win32CS::Release() {
71 LeaveCriticalSection(&cs);
74 THREADIDTYPE DSL_Mutex_Win32CS::LockingThread() {
75 return LockingThreadID;
78 bool DSL_Mutex_Win32CS::IsLockMine() {
79 if (refcnt > 0 && GetCurrentThreadId() == LockingThreadID) {
return true; }
83 bool DSL_Mutex_Win32CS::IsLocked() {
84 if (refcnt > 0) {
return true; }