semaphore

package
v0.0.0-...-c27c9a0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 14, 2024 License: Apache-2.0, MIT Imports: 9 Imported by: 3

Documentation

Overview

Package semaphore implements System V semaphores.

Index

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) FindByID

func (r *Registry) FindByID(id ipc.ID) *Set

FindByID looks up a set given an ID.

func (*Registry) FindByIndex

func (r *Registry) FindByIndex(index int32) *Set

FindByIndex looks up a set given an index.

func (*Registry) FindOrCreate

func (r *Registry) FindOrCreate(ctx context.Context, key ipc.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

func (r *Registry) HighestIndex() int32

HighestIndex returns the index of the highest used entry in the kernel's array.

func (*Registry) IPCInfo

func (r *Registry) IPCInfo() *linux.SemInfo

IPCInfo returns information about system-wide semaphore limits and parameters.

func (*Registry) Remove

func (r *Registry) Remove(id ipc.ID, creds *auth.Credentials) error

Remove removes set with give 'id' from the registry and marks the set as dead. All waiters will be awakened and fail.

func (*Registry) SemInfo

func (r *Registry) SemInfo() *linux.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.

type Set

type Set struct {
	// contains filtered or unexported fields
}

Set represents a set of semaphores that can be operated atomically.

+stateify savable

func (*Set) AbortWait

func (s *Set) AbortWait(num int32, ch chan struct{})

AbortWait notifies that a waiter is giving up and will not wait on the channel anymore.

func (*Set) CountNegativeWaiters

func (s *Set) CountNegativeWaiters(num int32, creds *auth.Credentials) (uint16, error)

CountNegativeWaiters returns number of waiters waiting for the sem to go to zero.

func (*Set) CountZeroWaiters

func (s *Set) CountZeroWaiters(num int32, creds *auth.Credentials) (uint16, error)

CountZeroWaiters returns number of waiters waiting for the sem's value to increase.

func (*Set) Destroy

func (s *Set) Destroy()

Destroy implements ipc.Mechanism.Destroy.

Preconditions: Caller must hold 's.mu'.

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) GetPID

func (s *Set) GetPID(num int32, creds *auth.Credentials) (int32, error)

GetPID returns the PID set when performing operations in the semaphore.

func (*Set) GetStat

func (s *Set) GetStat(creds *auth.Credentials) (*linux.SemidDS, error)

GetStat extracts semid_ds information from the set.

func (*Set) GetStatAny

func (s *Set) GetStatAny(creds *auth.Credentials) (*linux.SemidDS, error)

GetStatAny extracts semid_ds information from the set without requiring read access.

func (*Set) GetVal

func (s *Set) GetVal(num int32, creds *auth.Credentials) (int16, error)

GetVal returns a semaphore value.

func (*Set) GetValAll

func (s *Set) GetValAll(creds *auth.Credentials) ([]uint16, error)

GetValAll returns value for all semaphores.

func (*Set) ID

func (s *Set) ID() ipc.ID

ID returns semaphore's ID.

func (*Set) Lock

func (s *Set) Lock()

Lock implements ipc.Mechanism.Lock.

func (*Set) Object

func (s *Set) Object() *ipc.Object

Object implements ipc.Mechanism.Object.

func (*Set) Set

func (s *Set) Set(ctx context.Context, ds *linux.SemidDS) error

Set modifies attributes for a semaphore set. See semctl(IPC_SET).

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()'.

func (*Set) Size

func (s *Set) Size() int

Size returns the number of semaphores in the set. Size is immutable.

func (*Set) Unlock

func (s *Set) Unlock()

Unlock implements ipc.mechanism.Unlock.

+checklocksignore

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL