- Main Page
- Namespaces
- Classes
- Files
- Directories
- Related Pages

- Class List
- Class Hierarchy
- Class Members

# sbuild::lock Class Reference

Advisory locking. More...

`#include <sbuild-lock.h>`

Inheritance diagram for sbuild::lock:

[legend]
List of all members.

## Public Types
typedef custom_error< error_code > | error
| 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:

- sbuild/sbuild-lock.h
- sbuild/sbuild-lock.cc