diff options
author | Juan Linietsky <reduzio@gmail.com> | 2017-01-08 11:13:12 -0300 |
---|---|---|
committer | Juan Linietsky <reduzio@gmail.com> | 2017-01-08 11:13:12 -0300 |
commit | 263d5fcff86ff4b34b2a19bfe66b79e93f6bb976 (patch) | |
tree | 8cca09ddc9692d64e0c2b3098faf97cc1541fb1a | |
parent | aa60e02cf602c9c54b54eee257b3bfa675724788 (diff) |
Added missing readers writers lock to windows, should compile and run again..
-rw-r--r-- | drivers/windows/rw_lock_windows.cpp | 72 | ||||
-rw-r--r-- | drivers/windows/rw_lock_windows.h | 37 | ||||
-rw-r--r-- | platform/windows/os_windows.cpp | 2 |
3 files changed, 111 insertions, 0 deletions
diff --git a/drivers/windows/rw_lock_windows.cpp b/drivers/windows/rw_lock_windows.cpp new file mode 100644 index 0000000000..0da7bf4bd5 --- /dev/null +++ b/drivers/windows/rw_lock_windows.cpp @@ -0,0 +1,72 @@ + +#if defined(WINDOWS_ENABLED) + +#include "os/memory.h" +#include "rw_lock_windows.h" +#include "error_macros.h" +#include <stdio.h> + +void RWLockWindows::read_lock() { + + AcquireSRWLockShared(&lock); + +} + +void RWLockWindows::read_unlock() { + + ReleaseSRWLockShared(&lock); +} + +Error RWLockWindows::read_try_lock() { + + if (TryAcquireSRWLockShared(&lock)==0) { + return ERR_BUSY; + } else { + return OK; + } + +} + +void RWLockWindows::write_lock() { + + AcquireSRWLockExclusive(&lock); + +} + +void RWLockWindows::write_unlock() { + + ReleaseSRWLockExclusive(&lock); +} + +Error RWLockWindows::write_try_lock() { + if (TryAcquireSRWLockExclusive(&lock)==0) { + return ERR_BUSY; + } else { + return OK; + } +} + + +RWLock *RWLockWindows::create_func_windows() { + + return memnew( RWLockWindows ); +} + +void RWLockWindows::make_default() { + + create_func=create_func_windows; +} + + +RWLockWindows::RWLockWindows() { + + InitializeSRWLock(&lock); +} + + +RWLockWindows::~RWLockWindows() { + + +} + +#endif diff --git a/drivers/windows/rw_lock_windows.h b/drivers/windows/rw_lock_windows.h new file mode 100644 index 0000000000..c089c31c33 --- /dev/null +++ b/drivers/windows/rw_lock_windows.h @@ -0,0 +1,37 @@ +#ifndef RWLOCKWINDOWS_H +#define RWLOCKWINDOWS_H + +#if defined(WINDOWS_ENABLED) + +#include <windows.h> +#include "os/rw_lock.h" + +class RWLockWindows : public RWLock { + + + SRWLOCK lock; + + static RWLock *create_func_windows(); + +public: + + virtual void read_lock(); + virtual void read_unlock(); + virtual Error read_try_lock(); + + virtual void write_lock(); + virtual void write_unlock(); + virtual Error write_try_lock(); + + static void make_default(); + + RWLockWindows(); + + ~RWLockWindows(); + +}; + +#endif + + +#endif // RWLOCKWINDOWS_H diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp index 02138891b7..971ec25f77 100644 --- a/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp @@ -34,6 +34,7 @@ #include "drivers/windows/thread_windows.h" #include "drivers/windows/semaphore_windows.h" #include "drivers/windows/mutex_windows.h" +#include "drivers/windows/rw_lock_windows.h" #include "main/main.h" #include "drivers/windows/file_access_windows.h" #include "drivers/windows/dir_access_windows.h" @@ -180,6 +181,7 @@ void OS_Windows::initialize_core() { ThreadWindows::make_default(); SemaphoreWindows::make_default(); MutexWindows::make_default(); + RWLockWindows::make_default(); FileAccess::make_default<FileAccessWindows>(FileAccess::ACCESS_RESOURCES); FileAccess::make_default<FileAccessWindows>(FileAccess::ACCESS_USERDATA); |