prrwlock.h revision 754899d3e29037e1a3cde20437768a6da3c50527
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync/* ***** BEGIN LICENSE BLOCK *****
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync * Version: MPL 1.1/GPL 2.0/LGPL 2.1
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync *
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync * The contents of this file are subject to the Mozilla Public License Version
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync * 1.1 (the "License"); you may not use this file except in compliance with
935b743482f6f5b2a731d62322a75f9d111a3cb9vboxsync * the License. You may obtain a copy of the License at
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync * http://www.mozilla.org/MPL/
78f327ee942771169c65c91baf789fd10e72b01avboxsync *
78f327ee942771169c65c91baf789fd10e72b01avboxsync * Software distributed under the License is distributed on an "AS IS" basis,
78f327ee942771169c65c91baf789fd10e72b01avboxsync * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
78f327ee942771169c65c91baf789fd10e72b01avboxsync * for the specific language governing rights and limitations under the
78f327ee942771169c65c91baf789fd10e72b01avboxsync * License.
78f327ee942771169c65c91baf789fd10e72b01avboxsync *
78f327ee942771169c65c91baf789fd10e72b01avboxsync * The Original Code is the Netscape Portable Runtime (NSPR).
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync *
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync * The Initial Developer of the Original Code is
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync * Netscape Communications Corporation.
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync * Portions created by the Initial Developer are Copyright (C) 1998-2000
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync * the Initial Developer. All Rights Reserved.
f9bf78a22f6a21de513febdca5af9ced238d1867vboxsync *
f9bf78a22f6a21de513febdca5af9ced238d1867vboxsync * Contributor(s):
f9bf78a22f6a21de513febdca5af9ced238d1867vboxsync *
f9bf78a22f6a21de513febdca5af9ced238d1867vboxsync * Alternatively, the contents of this file may be used under the terms of
f9bf78a22f6a21de513febdca5af9ced238d1867vboxsync * either the GNU General Public License Version 2 or later (the "GPL"), or
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
131561c23ec73ceb3818b6df9ff32729642907dbvboxsync * in which case the provisions of the GPL or the LGPL are applicable instead
0b13ce7f75e6d378e896f340cb4197a0fbc07cbfvboxsync * of those above. If you wish to allow use of your version of this file only
0b13ce7f75e6d378e896f340cb4197a0fbc07cbfvboxsync * under the terms of either the GPL or the LGPL, and not to allow others to
e139144ef4fc5f2bbe26be64faf2737cd8ccf413vboxsync * use your version of this file under the terms of the MPL, indicate your
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync * decision by deleting the provisions above and replace them with the notice
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync * and other provisions required by the GPL or the LGPL. If you do not delete
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync * the provisions above, a recipient may use your version of this file under
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync * the terms of any one of the MPL, the GPL or the LGPL.
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync *
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync * ***** END LICENSE BLOCK ***** */
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync/*
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync** File: prrwlock.h
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync** Description: API to basic reader-writer lock functions of NSPR.
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync**
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync**/
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync#ifndef prrwlock_h___
0912cf29d2641459d225c40114c567a63273746cvboxsync#define prrwlock_h___
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync#include "prtypes.h"
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync
0912cf29d2641459d225c40114c567a63273746cvboxsync#ifdef VBOX_WITH_XPCOM_NAMESPACE_CLEANUP
701a45600245e42829e1187817299e812eebdec5vboxsync#define PR_NewRWLock VBoxNsprPR_NewRWLock
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync#define PR_DestroyRWLock VBoxNsprPR_DestroyRWLock
0912cf29d2641459d225c40114c567a63273746cvboxsync#define PR_RWLock_Rlock VBoxNsprPR_RWLock_Rlock
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync#define PR_RWLock_Wlock VBoxNsprPR_RWLock_Wlock
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync#define PR_RWLock_Unlock VBoxNsprPR_RWLock_Unlock
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync#endif /* VBOX_WITH_XPCOM_NAMESPACE_CLEANUP */
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsyncPR_BEGIN_EXTERN_C
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync/*
15fb3f6d968fd393475b33b09311294a23959b0fvboxsync * PRRWLock --
15fb3f6d968fd393475b33b09311294a23959b0fvboxsync *
15fb3f6d968fd393475b33b09311294a23959b0fvboxsync * The reader writer lock, PRRWLock, is an opaque object to the clients
6bbb64124ce2aa00c7f97c8c32b9607e6226b043vboxsync * of NSPR. All routines operate on a pointer to this opaque entity.
61d7d9128a38eb86895d38f1ad95bdf44fc0b240vboxsync */
f9bf78a22f6a21de513febdca5af9ced238d1867vboxsync
f9bf78a22f6a21de513febdca5af9ced238d1867vboxsync
0b13ce7f75e6d378e896f340cb4197a0fbc07cbfvboxsynctypedef struct PRRWLock PRRWLock;
0b13ce7f75e6d378e896f340cb4197a0fbc07cbfvboxsync
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync#define PR_RWLOCK_RANK_NONE 0
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync/***********************************************************************
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync** FUNCTION: PR_NewRWLock
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync** DESCRIPTION:
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync** Returns a pointer to a newly created reader-writer lock object.
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync** INPUTS: Lock rank
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync** Lock name
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync** OUTPUTS: void
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync** RETURN: PRRWLock*
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync** If the lock cannot be created because of resource constraints, NULL
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync** is returned.
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync**
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync***********************************************************************/
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsyncNSPR_API(PRRWLock*) PR_NewRWLock(PRUint32 lock_rank, const char *lock_name);
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync/***********************************************************************
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync** FUNCTION: PR_DestroyRWLock
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync** DESCRIPTION:
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync** Destroys a given RW lock object.
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync** INPUTS: PRRWLock *lock - Lock to be freed.
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync** OUTPUTS: void
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync** RETURN: None
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync***********************************************************************/
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsyncNSPR_API(void) PR_DestroyRWLock(PRRWLock *lock);
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync
0912cf29d2641459d225c40114c567a63273746cvboxsync/***********************************************************************
0912cf29d2641459d225c40114c567a63273746cvboxsync** FUNCTION: PR_RWLock_Rlock
0912cf29d2641459d225c40114c567a63273746cvboxsync** DESCRIPTION:
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync** Apply a read lock (non-exclusive) on a RWLock
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync** INPUTS: PRRWLock *lock - Lock to be read-locked.
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync** OUTPUTS: void
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync** RETURN: None
0b13ce7f75e6d378e896f340cb4197a0fbc07cbfvboxsync***********************************************************************/
0b13ce7f75e6d378e896f340cb4197a0fbc07cbfvboxsyncNSPR_API(void) PR_RWLock_Rlock(PRRWLock *lock);
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync
0912cf29d2641459d225c40114c567a63273746cvboxsync/***********************************************************************
0912cf29d2641459d225c40114c567a63273746cvboxsync** FUNCTION: PR_RWLock_Wlock
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync** DESCRIPTION:
0912cf29d2641459d225c40114c567a63273746cvboxsync** Apply a write lock (exclusive) on a RWLock
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync** INPUTS: PRRWLock *lock - Lock to write-locked.
15fb3f6d968fd393475b33b09311294a23959b0fvboxsync** OUTPUTS: void
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync** RETURN: None
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync***********************************************************************/
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsyncNSPR_API(void) PR_RWLock_Wlock(PRRWLock *lock);
15fb3f6d968fd393475b33b09311294a23959b0fvboxsync
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync/***********************************************************************
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync** FUNCTION: PR_RWLock_Unlock
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync** DESCRIPTION:
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync** Release a RW lock. Unlocking an unlocked lock has undefined results.
dee9e52b1688c0617890cbbd8a8488f9f315d1b7vboxsync** INPUTS: PRRWLock *lock - Lock to unlocked.
0912cf29d2641459d225c40114c567a63273746cvboxsync** OUTPUTS: void
0912cf29d2641459d225c40114c567a63273746cvboxsync** RETURN: void
0912cf29d2641459d225c40114c567a63273746cvboxsync***********************************************************************/
0912cf29d2641459d225c40114c567a63273746cvboxsyncNSPR_API(void) PR_RWLock_Unlock(PRRWLock *lock);
0912cf29d2641459d225c40114c567a63273746cvboxsync
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsyncPR_END_EXTERN_C
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync#endif /* prrwlock_h___ */
98242607fbc6f6f99815fbec709e38e73e7f9583vboxsync