]> pd.if.org Git - pdclib/blob - platform/win32/functions/threads/mtx_lock.c
PDCLib includes with quotes, not <>.
[pdclib] / platform / win32 / functions / threads / mtx_lock.c
1 #ifndef REGTEST\r
2 #include <threads.h>\r
3 #include <windows.h>\r
4 \r
5 int mtx_lock(mtx_t *mtx)\r
6 {\r
7     DWORD myId = GetCurrentThreadId();\r
8 \r
9     if(mtx->_ThreadId == (long) myId) {\r
10         mtx->_NestCount++;\r
11         return thrd_success;\r
12     }\r
13 \r
14     for(;;) {\r
15         LONG prev = InterlockedCompareExchange(&mtx->_ThreadId, myId, 0);\r
16         if(prev == 0)\r
17             return thrd_success;\r
18 \r
19         DWORD rv = WaitForSingleObject(mtx->_WaitEvHandle, INFINITE);\r
20         if(rv != WAIT_OBJECT_0)\r
21             return thrd_error;\r
22     }\r
23 }\r
24 #endif\r
25 \r
26 #ifdef TEST\r
27 #include "_PDCLIB_test.h"\r
28 \r
29 int main( void )\r
30 {\r
31     return TEST_RESULTS;\r
32 }\r
33 \r
34 #endif