1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11ba41365cf8e326bff31b693ddef75ba1c38c23a0phoglund@webrtc.org#include "webrtc/system_wrappers/source/rw_lock_posix.h" 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc { 14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 15ba41365cf8e326bff31b693ddef75ba1c38c23a0phoglund@webrtc.orgRWLockPosix::RWLockPosix() : lock_() { 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgRWLockPosix::~RWLockPosix() { 19ba41365cf8e326bff31b693ddef75ba1c38c23a0phoglund@webrtc.org pthread_rwlock_destroy(&lock_); 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgRWLockPosix* RWLockPosix::Create() { 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RWLockPosix* ret_val = new RWLockPosix(); 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!ret_val->Init()) { 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org delete ret_val; 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return NULL; 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return ret_val; 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgbool RWLockPosix::Init() { 32ba41365cf8e326bff31b693ddef75ba1c38c23a0phoglund@webrtc.org return pthread_rwlock_init(&lock_, 0) == 0; 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid RWLockPosix::AcquireLockExclusive() { 36ba41365cf8e326bff31b693ddef75ba1c38c23a0phoglund@webrtc.org pthread_rwlock_wrlock(&lock_); 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid RWLockPosix::ReleaseLockExclusive() { 40ba41365cf8e326bff31b693ddef75ba1c38c23a0phoglund@webrtc.org pthread_rwlock_unlock(&lock_); 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid RWLockPosix::AcquireLockShared() { 44ba41365cf8e326bff31b693ddef75ba1c38c23a0phoglund@webrtc.org pthread_rwlock_rdlock(&lock_); 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid RWLockPosix::ReleaseLockShared() { 48ba41365cf8e326bff31b693ddef75ba1c38c23a0phoglund@webrtc.org pthread_rwlock_unlock(&lock_); 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} // namespace webrtc 52