Add support for IPv6
[oweals/minetest.git] / src / jthread / jmutex.h
index 9ce013096f8a3817417d079003f2ed8319b15d5a..8efdc7bc58cff3d103a7b0df66fe53538e95da70 100644 (file)
@@ -30,6 +30,9 @@
 #define JMUTEX_H
 
 #if (defined(WIN32) || defined(_WIN32_WCE))
+       #ifndef _WIN32_WINNT
+               #define _WIN32_WINNT 0x0501
+       #endif
        #ifndef _WIN32_WCE
                #include <process.h>
        #endif // _WIN32_WCE
@@ -54,6 +57,7 @@ public:
        int Lock();
        int Unlock();
        bool IsInitialized()                                            { return initialized; }
+
 private:
 #if (defined(WIN32) || defined(_WIN32_WCE))
 #ifdef JMUTEX_CRITICALSECTION
@@ -63,8 +67,66 @@ private:
 #endif // JMUTEX_CRITICALSECTION
 #else // pthread mutex
        pthread_mutex_t mutex;
+
+       bool IsLocked() {
+               if (pthread_mutex_trylock(&mutex)) {
+                       pthread_mutex_unlock(&mutex);
+                       return true;
+               }
+               return false;
+       }
 #endif // WIN32
        bool initialized;
 };
 
+#ifdef _WIN32
+
+class Event {
+       HANDLE hEvent;
+
+public:
+       Event() {
+               hEvent = CreateEvent(NULL, 0, 0, NULL);
+       }
+       
+       ~Event() {
+               CloseHandle(hEvent);
+       }
+       
+       void wait() {
+               WaitForSingleObject(hEvent, INFINITE); 
+       }
+       
+       void signal() {
+               SetEvent(hEvent);
+       }
+};
+
+#else
+
+#include <semaphore.h>
+
+class Event {
+       sem_t sem;
+
+public:
+       Event() {
+               sem_init(&sem, 0, 0);
+       }
+       
+       ~Event() {
+               sem_destroy(&sem);
+       }
+       
+       void wait() {
+               sem_wait(&sem);
+       }
+       
+       void signal() {
+               sem_post(&sem);
+       }
+};
+
+#endif
+
 #endif // JMUTEX_H