Main Page   Class Hierarchy   Compound List   File List   Header Files   Compound Members   File Members  

vrpn_PeerMutex Class Reference

vrpn_PeerMutex This class provides distributed mutual exclusion between every instance with the same name for which addPeer() has been called. If a process calls request() when isAvailable() returns true, the mutex will attempt to secure a lock to whatever resource it is governing; either RequestGranted or RequestDenied callbacks will be triggered. If RequestGranted callbacks are triggered, the process has the lock until it explicitly calls release() (and can verify this by checking isHeldLocally()). Once the lock-owner calls release(), Release callbacks at every peer will be triggered. Like most vrpn classes, the mainloop() must be called frequently. Note that none of isAvailable(), isHeldLocally(), and isHeldRemotely() are true between when request() is called and either RequestGranted or RequestDenied callbacks are triggered. More...

#include <vrpn_Mutex.h>

List of all members.


Public Members

 vrpn_PeerMutex (const char * name, int port, const char * NICaddress = NULL)
This constructor opens a new connection/port for the mutex.

 ~vrpn_PeerMutex (void)
If isHeldLocally(), calls release().

vrpn_bool isAvailable (void) const
message.

vrpn_bool isHeldLocally (void) const
release() is called.

vrpn_bool isHeldRemotely (void) const
another process.

int numPeers (void) const
void mainloop (void)
void request (void)
if !isAvailable(), instead automatically triggering DeniedCallbacks.

void release (void)
and there isn't a request pending.

void addPeer (const char * stationName)
Takes a VRPN station name of the form "<host>:<port>".

void addRequestGrantedCallback (void * userdata, int (*) (void *))
These callbacks are triggered when OUR request is granted.

void addRequestDeniedCallback (void * userdata, int (*) (void *))
These callbacks are triggered when OUR request is denied.

void addTakeCallback (void * userdata, int (*) (void *))
only be triggered once between triggerings of ReleaseCallbacks.).

void addReleaseCallback (void * userdata, int (*) (void *))
mutex.


Protected Members

enum  state { OURS, REQUESTING, AVAILABLE, HELD_REMOTELY }
void sendRequest (vrpn_Connection *)
void sendRelease (vrpn_Connection *)
void sendGrantRequest (vrpn_Connection *, vrpn_uint32 IPnumber, vrpn_uint32 PortNumber)
void sendDenyRequest (vrpn_Connection *, vrpn_uint32 IPnumber, vrpn_uint32 PortNumber)
void triggerGrantCallbacks (void)
void triggerDenyCallbacks (void)
void triggerTakeCallbacks (void)
void triggerReleaseCallbacks (void)
void checkGrantMutex (void)
void init (const char * name)
 vrpn_PeerMutex (const char * name, vrpn_Connection * c)
resolve race conditions.

char* d_mutexName
state d_state
int d_numPeersGrantingLock
a request; when this reaches d_numPeers, the lock is ours.

vrpn_Connectiond_server
Receive on this connection.

vrpn_Connection** d_peer
Send on these connections to other Mutex's well-known-ports.

int d_numPeers
int d_numConnectionsAllocated
Dynamic array size for d_peer and d_peerGrantedLock.

vrpn_uint32 d_myIP
vrpn_uint32 d_myPort
vrpn_uint32 d_holderIP
vrpn_int32 d_holderPort
vrpn_int32 d_myId
vrpn_int32 d_request_type
vrpn_int32 d_release_type
vrpn_int32 d_grantRequest_type
vrpn_int32 d_denyRequest_type
mutexCallbackd_reqGrantedCB
mutexCallbackd_reqDeniedCB
mutexCallbackd_takeCB
mutexCallbackd_releaseCB
peerDatad_peerData
we abort requests that were interrupted by a shutdown.


Static Protected Members

int handle_request (void *, vrpn_HANDLERPARAM)
int handle_release (void *, vrpn_HANDLERPARAM)
int handle_grantRequest (void *, vrpn_HANDLERPARAM)
int handle_denyRequest (void *, vrpn_HANDLERPARAM)
int handle_losePeer (void *, vrpn_HANDLERPARAM)


Detailed Description

vrpn_PeerMutex This class provides distributed mutual exclusion between every instance with the same name for which addPeer() has been called. If a process calls request() when isAvailable() returns true, the mutex will attempt to secure a lock to whatever resource it is governing; either RequestGranted or RequestDenied callbacks will be triggered. If RequestGranted callbacks are triggered, the process has the lock until it explicitly calls release() (and can verify this by checking isHeldLocally()). Once the lock-owner calls release(), Release callbacks at every peer will be triggered. Like most vrpn classes, the mainloop() must be called frequently. Note that none of isAvailable(), isHeldLocally(), and isHeldRemotely() are true between when request() is called and either RequestGranted or RequestDenied callbacks are triggered.


Member Enumeration Documentation

enum vrpn_PeerMutex::state [protected]

Enumeration values:
OURS  
REQUESTING  
AVAILABLE  
HELD_REMOTELY  

Member Function Documentation

vrpn_PeerMutex::vrpn_PeerMutex (const char * name, int port, const char * NICaddress = NULL)

This constructor opens a new connection/port for the mutex.

vrpn_PeerMutex::~vrpn_PeerMutex (void)

If isHeldLocally(), calls release().

vrpn_bool vrpn_PeerMutex::isAvailable (void) const

message.

vrpn_bool vrpn_PeerMutex::isHeldLocally (void) const

release() is called.

vrpn_bool vrpn_PeerMutex::isHeldRemotely (void) const

another process.

int vrpn_PeerMutex::numPeers (void) const

void vrpn_PeerMutex::mainloop (void)

void vrpn_PeerMutex::request (void)

if !isAvailable(), instead automatically triggering DeniedCallbacks.

void vrpn_PeerMutex::release (void)

and there isn't a request pending.

void vrpn_PeerMutex::addPeer (const char * stationName)

Takes a VRPN station name of the form "<host>:<port>".

void vrpn_PeerMutex::addRequestGrantedCallback (void * userdata, int(* f)(void *))

These callbacks are triggered when OUR request is granted.

void vrpn_PeerMutex::addRequestDeniedCallback (void * userdata, int(* f)(void *))

These callbacks are triggered when OUR request is denied.

void vrpn_PeerMutex::addTakeCallback (void * userdata, int(* f)(void *))

only be triggered once between triggerings of ReleaseCallbacks.).

void vrpn_PeerMutex::addReleaseCallback (void * userdata, int(* f)(void *))

mutex.

void vrpn_PeerMutex::sendRequest (vrpn_Connection * c) [protected]

void vrpn_PeerMutex::sendRelease (vrpn_Connection * c) [protected]

void vrpn_PeerMutex::sendGrantRequest (vrpn_Connection * c, vrpn_uint32 IP, vrpn_uint32 PortNumber) [protected]

void vrpn_PeerMutex::sendDenyRequest (vrpn_Connection * c, vrpn_uint32 IP, vrpn_uint32 PortNumber) [protected]

void vrpn_PeerMutex::triggerGrantCallbacks (void) [protected]

void vrpn_PeerMutex::triggerDenyCallbacks (void) [protected]

void vrpn_PeerMutex::triggerTakeCallbacks (void) [protected]

void vrpn_PeerMutex::triggerReleaseCallbacks (void) [protected]

void vrpn_PeerMutex::checkGrantMutex (void) [protected]

void vrpn_PeerMutex::init (const char * name) [protected]

vrpn_PeerMutex::vrpn_PeerMutex (const char * name, vrpn_Connection * c) [protected]

resolve race conditions.

int vrpn_PeerMutex::handle_request (void * userdata, vrpn_HANDLERPARAM p) [static, protected]

int vrpn_PeerMutex::handle_release (void * userdata, vrpn_HANDLERPARAM p) [static, protected]

int vrpn_PeerMutex::handle_grantRequest (void * userdata, vrpn_HANDLERPARAM p) [static, protected]

int vrpn_PeerMutex::handle_denyRequest (void * userdata, vrpn_HANDLERPARAM p) [static, protected]

int vrpn_PeerMutex::handle_losePeer (void * userdata, vrpn_HANDLERPARAM) [static, protected]


Member Data Documentation

char* vrpn_PeerMutex::d_mutexName [protected]

state vrpn_PeerMutex::d_state [protected]

int vrpn_PeerMutex::d_numPeersGrantingLock [protected]

a request; when this reaches d_numPeers, the lock is ours.

vrpn_Connection* vrpn_PeerMutex::d_server [protected]

Receive on this connection.

vrpn_Connection** vrpn_PeerMutex::d_peer [protected]

Send on these connections to other Mutex's well-known-ports.

int vrpn_PeerMutex::d_numPeers [protected]

int vrpn_PeerMutex::d_numConnectionsAllocated [protected]

Dynamic array size for d_peer and d_peerGrantedLock.

vrpn_uint32 vrpn_PeerMutex::d_myIP [protected]

vrpn_uint32 vrpn_PeerMutex::d_myPort [protected]

vrpn_uint32 vrpn_PeerMutex::d_holderIP [protected]

vrpn_int32 vrpn_PeerMutex::d_holderPort [protected]

vrpn_int32 vrpn_PeerMutex::d_myId [protected]

vrpn_int32 vrpn_PeerMutex::d_request_type [protected]

vrpn_int32 vrpn_PeerMutex::d_release_type [protected]

vrpn_int32 vrpn_PeerMutex::d_grantRequest_type [protected]

vrpn_int32 vrpn_PeerMutex::d_denyRequest_type [protected]

mutexCallback* vrpn_PeerMutex::d_reqGrantedCB [protected]

mutexCallback* vrpn_PeerMutex::d_reqDeniedCB [protected]

mutexCallback* vrpn_PeerMutex::d_takeCB [protected]

mutexCallback* vrpn_PeerMutex::d_releaseCB [protected]

peerData* vrpn_PeerMutex::d_peerData [protected]

we abort requests that were interrupted by a shutdown.


The documentation for this class was generated from the following files:
Generated at Fri Sep 13 15:04:19 2002 for vrpn by doxygen 1.0.0 written by Dimitri van Heesch, © 1997-1999