Documentation ¶
Overview ¶
Package semaphore implements System V semaphores.
Index ¶
- type Registry
- func (r *Registry) FindByID(id int32) *Set
- func (r *Registry) FindByIndex(index int32) *Set
- func (r *Registry) FindOrCreate(ctx context.Context, key, nsems int32, mode linux.FileMode, ...) (*Set, error)
- func (r *Registry) HighestIndex() int32
- func (r *Registry) IPCInfo() *linux.SemInfo
- func (r *Registry) RemoveID(id int32, creds *auth.Credentials) error
- func (r *Registry) SemInfo() *linux.SemInfo
- func (r *Registry) StateFields() []string
- func (r *Registry) StateLoad(stateSourceObject state.Source)
- func (r *Registry) StateSave(stateSinkObject state.Sink)
- func (r *Registry) StateTypeName() string
- type Set
- func (s *Set) AbortWait(num int32, ch chan struct{})
- func (s *Set) Change(ctx context.Context, creds *auth.Credentials, owner fs.FileOwner, ...) error
- func (s *Set) CountNegativeWaiters(num int32, creds *auth.Credentials) (uint16, error)
- func (s *Set) CountZeroWaiters(num int32, creds *auth.Credentials) (uint16, error)
- func (s *Set) ExecuteOps(ctx context.Context, ops []linux.Sembuf, creds *auth.Credentials, pid int32) (chan struct{}, int32, error)
- func (s *Set) GetPID(num int32, creds *auth.Credentials) (int32, error)
- func (s *Set) GetStat(creds *auth.Credentials) (*linux.SemidDS, error)
- func (s *Set) GetVal(num int32, creds *auth.Credentials) (int16, error)
- func (s *Set) GetValAll(creds *auth.Credentials) ([]uint16, error)
- func (s *Set) SetVal(ctx context.Context, num int32, val int16, creds *auth.Credentials, pid int32) error
- func (s *Set) SetValAll(ctx context.Context, vals []uint16, creds *auth.Credentials, pid int32) error
- func (s *Set) Size() int
- func (s *Set) StateFields() []string
- func (s *Set) StateLoad(stateSourceObject state.Source)
- func (s *Set) StateSave(stateSinkObject state.Sink)
- func (s *Set) StateTypeName() string
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Registry ¶
type Registry struct {
// contains filtered or unexported fields
}
Registry maintains a set of semaphores that can be found by key or ID.
+stateify savable
func NewRegistry ¶
func NewRegistry(userNS *auth.UserNamespace) *Registry
NewRegistry creates a new semaphore set registry.
func (*Registry) FindByIndex ¶
FindByIndex looks up a set given an index.
func (*Registry) FindOrCreate ¶
func (r *Registry) FindOrCreate(ctx context.Context, key, nsems int32, mode linux.FileMode, private, create, exclusive bool) (*Set, error)
FindOrCreate searches for a semaphore set that matches 'key'. If not found, it may create a new one if requested. If private is true, key is ignored and a new set is always created. If create is false, it fails if a set cannot be found. If exclusive is true, it fails if a set with the same key already exists.
func (*Registry) HighestIndex ¶
HighestIndex returns the index of the highest used entry in the kernel's array.
func (*Registry) IPCInfo ¶
IPCInfo returns information about system-wide semaphore limits and parameters.
func (*Registry) RemoveID ¶
func (r *Registry) RemoveID(id int32, creds *auth.Credentials) error
RemoveID removes set with give 'id' from the registry and marks the set as dead. All waiters will be awakened and fail.
func (*Registry) SemInfo ¶
SemInfo returns a seminfo structure containing the same information as for IPC_INFO, except that SemUsz field returns the number of existing semaphore sets, and SemAem field returns the number of existing semaphores.
func (*Registry) StateFields ¶
func (*Registry) StateTypeName ¶
type Set ¶
type Set struct { // Id is a handle that identifies the set. ID int32 // contains filtered or unexported fields }
Set represents a set of semaphores that can be operated atomically.
+stateify savable
func (*Set) AbortWait ¶
AbortWait notifies that a waiter is giving up and will not wait on the channel anymore.
func (*Set) Change ¶
func (s *Set) Change(ctx context.Context, creds *auth.Credentials, owner fs.FileOwner, perms fs.FilePermissions) error
Change changes some fields from the set atomically.
func (*Set) CountNegativeWaiters ¶
CountNegativeWaiters returns number of waiters waiting for the sem to go to zero.
func (*Set) CountZeroWaiters ¶
CountZeroWaiters returns number of waiters waiting for the sem's value to increase.
func (*Set) ExecuteOps ¶
func (s *Set) ExecuteOps(ctx context.Context, ops []linux.Sembuf, creds *auth.Credentials, pid int32) (chan struct{}, int32, error)
ExecuteOps attempts to execute a list of operations to the set. It only succeeds when all operations can be applied. No changes are made if it fails.
On failure, it may return an error (retries are hopeless) or it may return a channel that can be waited on before attempting again.
func (*Set) GetValAll ¶
func (s *Set) GetValAll(creds *auth.Credentials) ([]uint16, error)
GetValAll returns value for all semaphores.
func (*Set) SetVal ¶
func (s *Set) SetVal(ctx context.Context, num int32, val int16, creds *auth.Credentials, pid int32) error
SetVal overrides a semaphore value, waking up waiters as needed.
func (*Set) SetValAll ¶
func (s *Set) SetValAll(ctx context.Context, vals []uint16, creds *auth.Credentials, pid int32) error
SetValAll overrides all semaphores values, waking up waiters as needed. It also sets semaphore's PID which was fixed in Linux 4.6.
'len(vals)' must be equal to 's.Size()'.