Index: webrtc/system_wrappers/source/rw_lock_winxp_win.cc |
diff --git a/webrtc/system_wrappers/source/rw_lock_winxp_win.cc b/webrtc/system_wrappers/source/rw_lock_winxp_win.cc |
index 0fb57d9b9fb8b10f4cb22746125b39a7bd92f038..9393c9f91a7af89a26c84c579ba57b6f5ca68919 100644 |
--- a/webrtc/system_wrappers/source/rw_lock_winxp_win.cc |
+++ b/webrtc/system_wrappers/source/rw_lock_winxp_win.cc |
@@ -11,16 +11,34 @@ |
#include "webrtc/system_wrappers/source/rw_lock_winxp_win.h" |
namespace webrtc { |
+namespace { |
+class ScopedLock { |
+ public: |
+ ScopedLock(CRITICAL_SECTION* lock) : lock_(lock) { |
+ EnterCriticalSection(lock_); |
+ } |
+ ~ScopedLock() { |
+ LeaveCriticalSection(lock_); |
+ } |
+ private: |
+ CRITICAL_SECTION* const lock_; |
+}; |
+} |
-RWLockWinXP::RWLockWinXP() {} |
-RWLockWinXP::~RWLockWinXP() {} |
+RWLockWinXP::RWLockWinXP() { |
+ InitializeCriticalSection(&critical_section_); |
+} |
+ |
+RWLockWinXP::~RWLockWinXP() { |
+ DeleteCriticalSection(&critical_section_); |
+} |
void RWLockWinXP::AcquireLockExclusive() { |
- CriticalSectionScoped cs(&critical_section_); |
+ ScopedLock cs(&critical_section_); |
if (writer_active_ || readers_active_ > 0) { |
++writers_waiting_; |
while (writer_active_ || readers_active_ > 0) { |
- write_condition_.SleepCS(critical_section_); |
+ write_condition_.SleepCS(&critical_section_); |
} |
--writers_waiting_; |
} |
@@ -28,7 +46,7 @@ void RWLockWinXP::AcquireLockExclusive() { |
} |
void RWLockWinXP::ReleaseLockExclusive() { |
- CriticalSectionScoped cs(&critical_section_); |
+ ScopedLock cs(&critical_section_); |
writer_active_ = false; |
if (writers_waiting_ > 0) { |
write_condition_.Wake(); |
@@ -38,12 +56,12 @@ void RWLockWinXP::ReleaseLockExclusive() { |
} |
void RWLockWinXP::AcquireLockShared() { |
- CriticalSectionScoped cs(&critical_section_); |
+ ScopedLock cs(&critical_section_); |
if (writer_active_ || writers_waiting_ > 0) { |
++readers_waiting_; |
while (writer_active_ || writers_waiting_ > 0) { |
- read_condition_.SleepCS(critical_section_); |
+ read_condition_.SleepCS(&critical_section_); |
} |
--readers_waiting_; |
} |
@@ -51,7 +69,7 @@ void RWLockWinXP::AcquireLockShared() { |
} |
void RWLockWinXP::ReleaseLockShared() { |
- CriticalSectionScoped cs(&critical_section_); |
+ ScopedLock cs(&critical_section_); |
--readers_active_; |
if (readers_active_ == 0 && writers_waiting_ > 0) { |
write_condition_.Wake(); |