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::

corelinux::Synchronized 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 waitZero (SemaphoreGroupPtr, Int, Int, Int)
 Called by the base semaphore to wait for a specific semaphore to have a zero value. 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

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

Called by the base semaphore to wait for a specific semaphore to have a zero value.

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