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