sbuild  1.7.1
Public Types | Public Member Functions | Protected Member Functions | Private Attributes | List of all members
sbuild::lock Class Referenceabstract

Advisory locking. More...

#include <lock.h>

+ Inheritance diagram for sbuild::lock:

Public Types

enum  type { LOCK_SHARED = F_RDLCK, LOCK_EXCLUSIVE = F_WRLCK, LOCK_NONE = F_UNLCK }
 Lock type. More...
 
enum  error_code {
  TIMEOUT_HANDLER, TIMEOUT_SET, TIMEOUT_CANCEL, LOCK,
  UNLOCK, LOCK_TIMEOUT, UNLOCK_TIMEOUT, DEVICE_LOCK,
  DEVICE_LOCK_TIMEOUT, DEVICE_TEST, DEVICE_UNLOCK, DEVICE_UNLOCK_TIMEOUT
}
 Error codes. More...
 
typedef custom_error< error_codeerror
 Exception type.
 

Public Member Functions

virtual void set_lock (type lock_type, unsigned int timeout)=0
 Acquire a lock. More...
 
virtual void unset_lock ()=0
 Release a lock. More...
 

Protected Member Functions

 lock ()
 The constructor.
 
virtual ~lock ()
 The destructor.
 
void set_alarm ()
 Set the SIGALARM handler. More...
 
void clear_alarm ()
 Restore the state of SIGALRM prior to starting lock acquisition.
 
void set_timer (const struct itimerval &timer)
 Set up an itimer for future expiry. More...
 
void unset_timer ()
 Remove any itimer currently set up. More...
 

Private Attributes

struct sigaction saved_signals
 Signals saved during timeout.
 

Detailed Description

Advisory locking.

This class defines a simple interface for shared and exclusive locks.

Member Enumeration Documentation

Error codes.

Enumerator
TIMEOUT_HANDLER 

Failed to set timeout handler.

TIMEOUT_SET 

Failed to set timeout.

TIMEOUT_CANCEL 

Failed to cancel timeout.

LOCK 

Failed to lock file.

UNLOCK 

Failed to unlock file.

LOCK_TIMEOUT 

Failed to lock file (timed out).

UNLOCK_TIMEOUT 

Failed to unlock file (timed out).

DEVICE_LOCK 

Failed to lock device.

DEVICE_LOCK_TIMEOUT 

Failed to lock device (timed out).

DEVICE_TEST 

Failed to test device lock.

DEVICE_UNLOCK 

Failed to unlock device.

DEVICE_UNLOCK_TIMEOUT 

Failed to unlock device (timed out)

Lock type.

Enumerator
LOCK_SHARED 

A shared (read) lock.

LOCK_EXCLUSIVE 

An exclusive (write) lock.

LOCK_NONE 

No lock.

Member Function Documentation

void sbuild::lock::set_alarm ( )
protected

Set the SIGALARM handler.

An error will be thrown on failure.

References saved_signals, and TIMEOUT_HANDLER.

Referenced by set_timer().

+ Here is the caller graph for this function:

virtual void sbuild::lock::set_lock ( type  lock_type,
unsigned int  timeout 
)
pure virtual

Acquire a lock.

Parameters
lock_typethe type of lock to acquire.
timeoutthe time in seconds to wait on the lock.

Implemented in sbuild::file_lock.

void sbuild::lock::set_timer ( const struct itimerval &  timer)
protected

Set up an itimer for future expiry.

This is used to interrupt system calls. This will set a handler for SIGALRM as a side effect (using set_alarm).

An error will be thrown on failure.

Parameters
timerthe timeout to set.

References clear_alarm(), set_alarm(), and TIMEOUT_SET.

Referenced by sbuild::file_lock::set_lock().

+ Here is the caller graph for this function:

virtual void sbuild::lock::unset_lock ( )
pure virtual

Release a lock.

This is equivalent to set_lock with a lock_type of LOCK_NONE and a timeout of 0.

Implemented in sbuild::file_lock.

void sbuild::lock::unset_timer ( )
protected

Remove any itimer currently set up.

This will clear any SIGALRM handler (using clear_alarm).

An error will be thrown on failure.

References clear_alarm(), and TIMEOUT_CANCEL.

Referenced by sbuild::file_lock::set_lock().

+ Here is the caller graph for this function:


The documentation for this class was generated from the following files: