Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Examples  

corelinux::SemaphoreCommon Class Reference

The SemaphoreCommon manages the SemaphoreGroup common storage area. More...

#include <SemaphoreCommon.hpp>

Inheritance diagram for corelinux::SemaphoreCommon

Inheritance graph
[legend]
Collaboration diagram for corelinux::SemaphoreCommon:

Collaboration graph
[legend]
List of all members.

Static Public Methods

Int getSemaphoreMaxValue ( SemaphoreGroupPtr, Int )
 Returns the maximum value for a semaphore as defined by the original semaphore claimant. More...

void groupDefined ( SemaphoreGroupPtr )
 When a shared semaphore group is created, it is updated in the CSA, either by increasing the count of processes accessing a particular group, or adding to the csa initially. More...

Int groupUnDefined ( SemaphoreGroupPtr )
 When the local process is deleting a semaphore group and it is considered a shared group, we are asked to adjust the map accordingly. More...

Int setLock ( SemaphoreGroupPtr, Int, Int, Int )
 Called by the base semaphore to aquire a lock for a specific semaphore. More...

Int setUnLock ( SemaphoreGroupPtr, Int, Int, Int )
 Called by the base semaphore to relinquish a lock for a specific semaphore. More...

Int obtainSemaphore ( SemaphoreGroupPtr, Int, IntRef, IntRef, IntRef, Int )
 Typically called by a SemaphoreGroup prior to passing out the semaphore type to the caller. More...

Int relinquishSemaphore (SemaphoreGroupPtr,Int)
 Called when the semaphore is no longer being referenced. More...

Int setMaxValue ( SemaphoreGroupPtr, Int, Int )
 Called to set the semaphore maximum value. More...


Protected Methods

 SemaphoreCommon ( void )
 Default constructor used by class.

virtual ~SemaphoreCommon ( void )
 Destructor.

void registerGroup ( SemaphoreGroupPtr )
 Does the work of getting the group registered in the CSA. More...

Int deregisterGroup ( SemaphoreGroupPtr )
 Does the work of reducing the group share count, or marking the group for reclaimation. More...

Int claimSemaphore ( SemaphoreGroupPtr, Int, IntRef, IntRef, IntRef, Int )
 Called when the group is determined to be shared and a semaphore share is to be claimed. More...

Int reclaimSemaphore (SemaphoreGroupPtr,Int)
 Called when a group wishes to let the CSA reclaim a semaphore share. More...

CSAGrpHeaderPtr findGroup ( IntCref , IntCref , CSAGrpHeaderPtr )
 Attempt to locate a specific group.

CSAGrpHeaderPtr findAvailableGroup ( IntCref , IntCref , CSAGrpHeaderPtr )
 Find open slot that fits count criteria.

CSAGrpHeaderPtr subsetGroup ( Int, CSAGrpHeaderPtr )
 Utility to clean CSA group tail.

CSAGrpHeaderPtr combineGroup ( Int, CSAGrpHeaderPtr )
bool isOriginator ( void ) const
Int getOriginatorId ( void ) const
Int canonicalUndefined ( void )

Static Protected Methods

void createAttachment ( void )
 Factory for CSA.

void exitAttachment ( void )
 On the way out from run-time.


Friends

class  CoreLinuxGuardPool

Detailed Description

The SemaphoreCommon manages the SemaphoreGroup common storage area.

This area is to communicate between address spaces when using one of the CoreLinux++ SemaphoreGroup types in public mode.


Member Function Documentation

Int corelinux::SemaphoreCommon::claimSemaphore ( SemaphoreGroupPtr aGroup,
Int aSemIndex,
IntRef aMaxValue,
IntRef aRecurse,
IntRef aBalking,
Int aFailConstraint ) [protected]
 

Called when the group is determined to be shared and a semaphore share is to be claimed.

Parameters:
SemaphoreGroup   the group pointer
Int   the semaphore identifier/index -1 = any
Int   the initial value (becomes the max if new)
IntRef   the recursive condition
IntRef   the balking condition
Int   0 must not exist, 1 share, 2 must exist

Int corelinux::SemaphoreCommon::deregisterGroup ( SemaphoreGroupPtr aGroup ) [protected]
 

Does the work of reducing the group share count, or marking the group for reclaimation.

Parameters:
SemaphoreGroup   pointer to register

Int corelinux::SemaphoreCommon::getSemaphoreMaxValue ( SemaphoreGroupPtr aGroup,
Int aSemId ) [static]
 

Returns the maximum value for a semaphore as defined by the original semaphore claimant.

Parameters:
SemaphoreGroup   pointer to group owner
Int   zero offset semaphore identifier
Returns:
Int -1 for local unknown, > 0 for common

void corelinux::SemaphoreCommon::groupDefined ( SemaphoreGroupPtr aGroup ) [static]
 

When a shared semaphore group is created, it is updated in the CSA, either by increasing the count of processes accessing a particular group, or adding to the csa initially.

Parameters:
SemaphoreGroup   pointer

Int corelinux::SemaphoreCommon::groupUnDefined ( SemaphoreGroupPtr aGroup ) [static]
 

When the local process is deleting a semaphore group and it is considered a shared group, we are asked to adjust the map accordingly.

Parameters:
SemaphoreGroup   pointer to the group
Returns:
Int number of shares on group

Int corelinux::SemaphoreCommon::obtainSemaphore ( SemaphoreGroupPtr aGroup,
Int aSemIndex,
IntRef aMaxValue,
IntRef aRecurse,
IntRef aBalking,
Int aFailConstraint ) [static]
 

Typically called by a SemaphoreGroup prior to passing out the semaphore type to the caller.

Parameters:
SemaphoreGroup   the group pointer
Int   the semaphore identifier/index -1 = any
Int   reference the initial value (becomes the max if new)
Int   reference the recursive condition
Int   reference the balking condition
Int   0 must not exist, 1 share, 2 must exist

Int corelinux::SemaphoreCommon::reclaimSemaphore ( SemaphoreGroupPtr aGroup,
Int aSemIndex ) [protected]
 

Called when a group wishes to let the CSA reclaim a semaphore share.

Parameters:
SemaphoreGroup   the group pointer
Int   the semaphore identifier/index
Returns:
Int the number of shares outstanding

void corelinux::SemaphoreCommon::registerGroup ( SemaphoreGroupPtr aGroup ) [protected]
 

Does the work of getting the group registered in the CSA.

Parameters:
SemaphoreGroup   pointer to register

Int corelinux::SemaphoreCommon::relinquishSemaphore ( SemaphoreGroupPtr aGroup,
Int aSemIndex ) [static]
 

Called when the semaphore is no longer being referenced.

Effectively reducing the share count for shared group semaphores

Parameters:
SemaphoreGroup   pointer
Int   the zero index semaphore identifier
Returns:
Int the number of outstanding shares

Int corelinux::SemaphoreCommon::setLock ( SemaphoreGroupPtr aGroup,
Int aGid,
Int aSid,
Int aFlg ) [static]
 

Called by the base semaphore to aquire a lock for a specific semaphore.

Parameters:
SemaphoreGroup   pointer to the group
Int   the system group id
Int   the zero offset semaphore id
Int   the system dependent flag
Returns:
Int return code

Int corelinux::SemaphoreCommon::setMaxValue ( SemaphoreGroupPtr aGroup,
Int aId,
Int aValue ) [static]
 

Called to set the semaphore maximum value.

For local this is SETVAL, for shared it is ignored

Parameters:
SemaphoreGroup   pointer
Int   the zero index semaphore identifier
Int   the value

Int corelinux::SemaphoreCommon::setUnLock ( SemaphoreGroupPtr aGroup,
Int aGid,
Int aSid,
Int aFlg ) [static]
 

Called by the base semaphore to relinquish a lock for a specific semaphore.

Parameters:
SemaphoreGroup   pointer to the group
Int   the system group id
Int   the zero offset semaphore id
Int   the system dependent flag
Returns:
Int return code


The documentation for this class was generated from the following files:
This is the CoreLinux++ reference manual
Provided by The CoreLinux Consortium