aboutsummaryrefslogtreecommitdiff
path: root/libs/usvfs/src/usvfs_dll/semaphore.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/usvfs/src/usvfs_dll/semaphore.h')
-rw-r--r--libs/usvfs/src/usvfs_dll/semaphore.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/libs/usvfs/src/usvfs_dll/semaphore.h b/libs/usvfs/src/usvfs_dll/semaphore.h
new file mode 100644
index 0000000..1048c47
--- /dev/null
+++ b/libs/usvfs/src/usvfs_dll/semaphore.h
@@ -0,0 +1,27 @@
+#pragma once
+
+// based on code by Jeff Preshing
+
+// this is a synchronization class that prefers
+// undefined behaviour over deadlock. It's utterly broken
+// and needs to be replaced in time.
+
+class RecursiveBenaphore
+{
+
+public:
+ RecursiveBenaphore();
+ ~RecursiveBenaphore();
+
+ // wait on the semaphore. after timeout this will check if the current owner
+ // thread is still alive and steal the semaphore if it isn't. Otherwise this
+ // will continue to wait.
+ void wait(DWORD timeout = INFINITE);
+ void signal();
+
+private:
+ LONG m_Counter;
+ DWORD m_OwnerId;
+ int m_Recursion;
+ HANDLE m_Semaphore;
+};