sbuild::lock Class Reference

Advisory locking. More...

#include <sbuild-lock.h>

Inheritance diagram for sbuild::lock:

Inheritance graph
[legend]
List of all members.

Public Types

typedef custom_error< error_codeerror
 Exception type.
 LOCK_SHARED = F_RDLCK
 A shared (read) lock.
 LOCK_EXCLUSIVE = F_WRLCK
 An exclusive (write) lock.
 LOCK_NONE = F_UNLCK
 No lock.
 TIMEOUT_HANDLER
 Failed to set timeout handler.
 TIMEOUT_SET
 Failed to set timeout.
 TIMEOUT_CANCEL
 Failed to cancel timeout.
 LOCK
 Failed to lock file (timed out).
 LOCK_TIMEOUT
 Failed to lock file.
 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).
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,
  LOCK_TIMEOUT, DEVICE_LOCK, DEVICE_LOCK_TIMEOUT, DEVICE_TEST,
  DEVICE_UNLOCK, DEVICE_UNLOCK_TIMEOUT
}
 Error codes. More...

Public Member Functions

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

Protected Member Functions

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

Private Attributes

sigaction saved_signals
 Signals saved during timeout.

Detailed Description

Advisory locking.

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


Member Typedef Documentation

typedef custom_error<error_code> sbuild::lock::error

Exception type.


Member Enumeration Documentation

enum sbuild::lock::error_code

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 (timed out).
LOCK_TIMEOUT  Failed to lock file.
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).

enum sbuild::lock::type

Lock type.

Enumerator:
LOCK_SHARED  A shared (read) lock.
LOCK_EXCLUSIVE  An exclusive (write) lock.
LOCK_NONE  No lock.


Constructor & Destructor Documentation

lock::lock (  )  [protected]

The constructor.

lock::~lock (  )  [protected, virtual]

The destructor.


Member Function Documentation

void lock::clear_alarm (  )  [protected]

Restore the state of SIGALRM prior to starting lock acquisition.

void lock::set_alarm (  )  [protected]

Set the SIGALARM handler.

An error will be thrown on failure.

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

Acquire a lock.

Parameters:
lock_type the type of lock to acquire.
timeout the time in seconds to wait on the lock.

Implemented in sbuild::file_lock, and sbuild::device_lock.

void lock::set_timer ( struct itimerval const &  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:
timer the timeout to set.

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, and sbuild::device_lock.

void 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.


Member Data Documentation

struct sigaction sbuild::lock::saved_signals [private]

Signals saved during timeout.


The documentation for this class was generated from the following files:
Generated on Mon Sep 11 23:19:44 2006 for schroot by  doxygen 1.4.7