blob: b9b5d1a79f006612cc263e7a721236ec98528280 [file] [log] [blame]
niklase@google.com470e71d2011-07-07 08:21:25 +00001/*
mflodman@webrtc.orgcee447a2012-06-28 07:29:46 +00002 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
niklase@google.com470e71d2011-07-07 08:21:25 +00003 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
mflodman@webrtc.orgcee447a2012-06-28 07:29:46 +000011#include <assert.h>
niklase@google.com470e71d2011-07-07 08:21:25 +000012
pbos@webrtc.orgf5d4cb12013-05-17 13:44:48 +000013#include "webrtc/system_wrappers/interface/rw_lock_wrapper.h"
14#include "webrtc/video_engine/vie_manager_base.h"
mflodman@webrtc.org9a8fa4e2011-12-14 08:18:42 +000015
niklase@google.com470e71d2011-07-07 08:21:25 +000016namespace webrtc {
17
mflodman@webrtc.org9a8fa4e2011-12-14 08:18:42 +000018ViEManagerBase::ViEManagerBase()
19 : instance_rwlock_(*RWLockWrapper::CreateRWLock()) {
niklase@google.com470e71d2011-07-07 08:21:25 +000020}
21
mflodman@webrtc.org9a8fa4e2011-12-14 08:18:42 +000022ViEManagerBase::~ViEManagerBase() {
23 delete &instance_rwlock_;
niklase@google.com470e71d2011-07-07 08:21:25 +000024}
25
mflodman@webrtc.org9a8fa4e2011-12-14 08:18:42 +000026void ViEManagerBase::ReadLockManager() const {
27 instance_rwlock_.AcquireLockShared();
niklase@google.com470e71d2011-07-07 08:21:25 +000028}
29
mflodman@webrtc.org9a8fa4e2011-12-14 08:18:42 +000030void ViEManagerBase::ReleaseLockManager() const {
31 instance_rwlock_.ReleaseLockShared();
niklase@google.com470e71d2011-07-07 08:21:25 +000032}
33
mflodman@webrtc.org9a8fa4e2011-12-14 08:18:42 +000034void ViEManagerBase::WriteLockManager() {
35 instance_rwlock_.AcquireLockExclusive();
niklase@google.com470e71d2011-07-07 08:21:25 +000036}
37
mflodman@webrtc.org9a8fa4e2011-12-14 08:18:42 +000038void ViEManagerBase::ReleaseWriteLockManager() {
39 instance_rwlock_.ReleaseLockExclusive();
niklase@google.com470e71d2011-07-07 08:21:25 +000040}
41
mflodman@webrtc.org9a8fa4e2011-12-14 08:18:42 +000042ViEManagerScopedBase::ViEManagerScopedBase(const ViEManagerBase& ViEManagerBase)
43 : vie_manager_(&ViEManagerBase),
44 ref_count_(0) {
45 vie_manager_->ReadLockManager();
niklase@google.com470e71d2011-07-07 08:21:25 +000046}
47
mflodman@webrtc.org9a8fa4e2011-12-14 08:18:42 +000048ViEManagerScopedBase::~ViEManagerScopedBase() {
49 assert(ref_count_ == 0);
50 vie_manager_->ReleaseLockManager();
niklase@google.com470e71d2011-07-07 08:21:25 +000051}
52
mflodman@webrtc.orgcee447a2012-06-28 07:29:46 +000053ViEManagerWriteScoped::ViEManagerWriteScoped(ViEManagerBase* vie_manager)
54 : vie_manager_(vie_manager) {
mflodman@webrtc.org9a8fa4e2011-12-14 08:18:42 +000055 vie_manager_->WriteLockManager();
niklase@google.com470e71d2011-07-07 08:21:25 +000056}
57
mflodman@webrtc.org9a8fa4e2011-12-14 08:18:42 +000058ViEManagerWriteScoped::~ViEManagerWriteScoped() {
59 vie_manager_->ReleaseWriteLockManager();
60}
61
niklase@google.com470e71d2011-07-07 08:21:25 +000062ViEManagedItemScopedBase::ViEManagedItemScopedBase(
mflodman@webrtc.orgcee447a2012-06-28 07:29:46 +000063 ViEManagerScopedBase* vie_scoped_manager)
mflodman@webrtc.org9a8fa4e2011-12-14 08:18:42 +000064 : vie_scoped_manager_(vie_scoped_manager) {
mflodman@webrtc.orgcee447a2012-06-28 07:29:46 +000065 vie_scoped_manager_->ref_count_++;
niklase@google.com470e71d2011-07-07 08:21:25 +000066}
67
mflodman@webrtc.org9a8fa4e2011-12-14 08:18:42 +000068ViEManagedItemScopedBase::~ViEManagedItemScopedBase() {
mflodman@webrtc.orgcee447a2012-06-28 07:29:46 +000069 vie_scoped_manager_->ref_count_--;
niklase@google.com470e71d2011-07-07 08:21:25 +000070}
mflodman@webrtc.org9a8fa4e2011-12-14 08:18:42 +000071
72} // namespace webrtc