michael@0: /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: /* michael@0: ** File: prrwlock.h michael@0: ** Description: API to basic reader-writer lock functions of NSPR. michael@0: ** michael@0: **/ michael@0: michael@0: #ifndef prrwlock_h___ michael@0: #define prrwlock_h___ michael@0: michael@0: #include "prtypes.h" michael@0: michael@0: PR_BEGIN_EXTERN_C michael@0: michael@0: /* michael@0: * PRRWLock -- michael@0: * michael@0: * The reader writer lock, PRRWLock, is an opaque object to the clients michael@0: * of NSPR. All routines operate on a pointer to this opaque entity. michael@0: */ michael@0: michael@0: michael@0: typedef struct PRRWLock PRRWLock; michael@0: michael@0: #define PR_RWLOCK_RANK_NONE 0 michael@0: michael@0: michael@0: /*********************************************************************** michael@0: ** FUNCTION: PR_NewRWLock michael@0: ** DESCRIPTION: michael@0: ** Returns a pointer to a newly created reader-writer lock object. michael@0: ** INPUTS: Lock rank michael@0: ** Lock name michael@0: ** OUTPUTS: void michael@0: ** RETURN: PRRWLock* michael@0: ** If the lock cannot be created because of resource constraints, NULL michael@0: ** is returned. michael@0: ** michael@0: ***********************************************************************/ michael@0: NSPR_API(PRRWLock*) PR_NewRWLock(PRUint32 lock_rank, const char *lock_name); michael@0: michael@0: /*********************************************************************** michael@0: ** FUNCTION: PR_DestroyRWLock michael@0: ** DESCRIPTION: michael@0: ** Destroys a given RW lock object. michael@0: ** INPUTS: PRRWLock *lock - Lock to be freed. michael@0: ** OUTPUTS: void michael@0: ** RETURN: None michael@0: ***********************************************************************/ michael@0: NSPR_API(void) PR_DestroyRWLock(PRRWLock *lock); michael@0: michael@0: /*********************************************************************** michael@0: ** FUNCTION: PR_RWLock_Rlock michael@0: ** DESCRIPTION: michael@0: ** Apply a read lock (non-exclusive) on a RWLock michael@0: ** INPUTS: PRRWLock *lock - Lock to be read-locked. michael@0: ** OUTPUTS: void michael@0: ** RETURN: None michael@0: ***********************************************************************/ michael@0: NSPR_API(void) PR_RWLock_Rlock(PRRWLock *lock); michael@0: michael@0: /*********************************************************************** michael@0: ** FUNCTION: PR_RWLock_Wlock michael@0: ** DESCRIPTION: michael@0: ** Apply a write lock (exclusive) on a RWLock michael@0: ** INPUTS: PRRWLock *lock - Lock to write-locked. michael@0: ** OUTPUTS: void michael@0: ** RETURN: None michael@0: ***********************************************************************/ michael@0: NSPR_API(void) PR_RWLock_Wlock(PRRWLock *lock); michael@0: michael@0: /*********************************************************************** michael@0: ** FUNCTION: PR_RWLock_Unlock michael@0: ** DESCRIPTION: michael@0: ** Release a RW lock. Unlocking an unlocked lock has undefined results. michael@0: ** INPUTS: PRRWLock *lock - Lock to unlocked. michael@0: ** OUTPUTS: void michael@0: ** RETURN: void michael@0: ***********************************************************************/ michael@0: NSPR_API(void) PR_RWLock_Unlock(PRRWLock *lock); michael@0: michael@0: PR_END_EXTERN_C michael@0: michael@0: #endif /* prrwlock_h___ */