114 lines
3.3 KiB
C++
114 lines
3.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.
|
|
*/
|
|
|
|
#include "vie_manager_base.h"
|
|
#include "rw_lock_wrapper.h"
|
|
#include "assert.h"
|
|
|
|
namespace webrtc {
|
|
|
|
ViEManagerBase::ViEManagerBase() :
|
|
_instanceRWLock(*RWLockWrapper::CreateRWLock())
|
|
{
|
|
}
|
|
ViEManagerBase::~ViEManagerBase()
|
|
{
|
|
delete &_instanceRWLock;
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// ReadLockManager
|
|
//
|
|
// Lock count increase. Used by ViEManagerScopedBase
|
|
// ----------------------------------------------------------------------------
|
|
void ViEManagerBase::ReadLockManager() const
|
|
{
|
|
_instanceRWLock.AcquireLockShared();
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// ReleaseLockManager
|
|
//
|
|
// Releases the lock count.
|
|
// ----------------------------------------------------------------------------
|
|
void ViEManagerBase::ReleaseLockManager() const
|
|
{
|
|
_instanceRWLock.ReleaseLockShared();
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// WriteLockManager
|
|
//
|
|
// Lock count increase. Used by ViEManagerWriteScoped
|
|
// ----------------------------------------------------------------------------
|
|
void ViEManagerBase::WriteLockManager()
|
|
{
|
|
_instanceRWLock.AcquireLockExclusive();
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// ReleaseLockManager
|
|
//
|
|
// Releases the lock count.
|
|
// ----------------------------------------------------------------------------
|
|
void ViEManagerBase::ReleaseWriteLockManager()
|
|
{
|
|
_instanceRWLock.ReleaseLockExclusive();
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// ViEManagerScopedBase
|
|
//
|
|
// ----------------------------------------------------------------------------
|
|
ViEManagerScopedBase::ViEManagerScopedBase(const ViEManagerBase& ViEManagerBase) :
|
|
_vieManager(&ViEManagerBase), _refCount(0)
|
|
{
|
|
_vieManager->ReadLockManager();
|
|
}
|
|
|
|
ViEManagerScopedBase::~ViEManagerScopedBase()
|
|
{
|
|
assert(_refCount==0);
|
|
_vieManager->ReleaseLockManager();
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
///
|
|
// ViEManagerWriteScoped
|
|
//
|
|
// ----------------------------------------------------------------------------
|
|
ViEManagerWriteScoped::ViEManagerWriteScoped(ViEManagerBase& vieManager) :
|
|
_vieManager(&vieManager)
|
|
{
|
|
_vieManager->WriteLockManager();
|
|
}
|
|
|
|
ViEManagerWriteScoped::~ViEManagerWriteScoped()
|
|
{
|
|
_vieManager->ReleaseWriteLockManager();
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// ViEManagedItemScopedBase
|
|
//
|
|
// ----------------------------------------------------------------------------
|
|
ViEManagedItemScopedBase::ViEManagedItemScopedBase(
|
|
ViEManagerScopedBase& vieScopedManager) :
|
|
_vieScopedManager(vieScopedManager)
|
|
{
|
|
_vieScopedManager._refCount++;
|
|
}
|
|
|
|
ViEManagedItemScopedBase::~ViEManagedItemScopedBase()
|
|
{
|
|
_vieScopedManager._refCount--;
|
|
}
|
|
} // namespace webrtc
|