| 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();
|
|
|