Files
platform-external-webrtc/webrtc/system_wrappers/source/rw_lock_winxp_win.h
tommi 61046eb38d Rename RWLockGeneric to RWLockWinXP to more accurately reflect when it's used.
Since this is on Windows only, I'm also using the CriticalSectionWrapper and ConditionVariableWrapper Windows types directly which allows us to skip 3 extra heap allocations. It also helps with the removal of the 'friend' relationship between ConditionVariableWrapper and CriticalSectionWrapper, which is causing headaches on Mac.

BUG=

Review URL: https://codereview.webrtc.org/1595983002

Cr-Commit-Position: refs/heads/master@{#11300}
2016-01-19 11:00:01 +00:00

46 lines
1.3 KiB
C++

/*
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef WEBRTC_SYSTEM_WRAPPERS_SOURCE_RW_LOCK_WINXP_WIN_H_
#define WEBRTC_SYSTEM_WRAPPERS_SOURCE_RW_LOCK_WINXP_WIN_H_
#include "webrtc/system_wrappers/include/rw_lock_wrapper.h"
#include "webrtc/system_wrappers/source/condition_variable_event_win.h"
#include "webrtc/system_wrappers/source/critical_section_win.h"
#include "webrtc/typedefs.h"
namespace webrtc {
class RWLockWinXP : public RWLockWrapper {
public:
RWLockWinXP();
~RWLockWinXP() override;
void AcquireLockExclusive() override;
void ReleaseLockExclusive() override;
void AcquireLockShared() override;
void ReleaseLockShared() override;
private:
CriticalSectionWindows critical_section_;
ConditionVariableEventWin read_condition_;
ConditionVariableEventWin write_condition_;
int readers_active_ = 0;
bool writer_active_ = false;
int readers_waiting_ = 0;
int writers_waiting_ = 0;
};
} // namespace webrtc
#endif // WEBRTC_SYSTEM_WRAPPERS_SOURCE_RW_LOCK_WINXP_WIN_H_