locks

Langue: en

Version: 344901 (ubuntu - 24/10/10)

Autres sections - même nom

Section: 3 (Bibliothèques de fonctions)


BSD mandoc

NAME

locks - libbash library that implements locking (directory based).

This library is not throughoutly tested - use with caution!

SYNOPSIS

dirInitLock
Aq object [Aq spin ]
dirTryLock
Aq object
dirLock
Aq object
dirUnlock
Aq object
dirDestroyLock
Aq object

DESCRIPTION

General

is a collection of functions that implement locking (mutex like) in bash scripting language. The whole idea is based on the fact that directory creation/removal is an atomic process. The creation of this library was inspired by studying CVS locks management.

Same lock object can by used by several processes to serialize access to some shared resource. (Well, yeah, this what locks were invented for...) To actually do this, processes just need to access lock object by the same name.

Functions list:

dirInitLock
Initialize a lock object for your proccess
dirTryLock
Try to lock the lock object - give up if its already locked
dirLock
Lock the lock object - will block until object is unlocked
dirUnlock
Unlock the lock object
dirDestroyLock
Destroy the lock object - free resources

Detailed interface description follows.

FUNCTIONS DESCRIPTIONS

dirInitLock Ao Fa object Ac Bq Aq Fa spin

Initialize a lock object for your process. Only after a lock is initialized, your proccess will be able to use it. Notice: This action does not lock the object.

The lock can be set on two types of objects. The first is an existing directory. In this case, Aq dir must be a path (relative or full). The path must contain a `/' The second is an abstract object used as a lock. In this case, the name of the lock will not contain any `/' This can be used to create locks without creating real directories for them. Notice: Do not call your lock object `.lock'

Parameters:

Aq Fa object The name of the lock object (either existing directory or abstract name)
Aq Fa spin The time (in seconds) that the funtion
dirLock will wait between two runs of dirTryLock This parameter is optional, and its value generally should be less then 1. If ommited, a default value (0.01) is set.

Return Value: One of the following:

0
The action finished successfully.
1
The action failed. You do not have permissions to preform it.
3
The directory path could not be resolved. Possibly parameter does contain `/' , but refers to directory that does not exist.

dirTryLock Aq Fa object

Try to lock the lock object. The function always returns immediately.

Parameters:

Aq Fa object The object that the lock is set on.

Return Value: One of the following:

0
The action finished successfully.
1
The action failed. The object is already locked.
2
The action failed. Your proccess did not initialize a lock for the object.
3
The directory path could not be resolved.

dirLock Aq Fa object

Lock given lock object. If the object is already locked - the function will block untill the object is unlocked. After each try (dirTryLock) the function will sleep for spin seconds (spin is defined using dirInitLock ).

Parameters:

Aq Fa object The directory that the lock is set on.

Return Value: One of the following:

0
The action finished successfully.
2
The action failed. Your proccess did not initialize a lock for the directory.
3
The directory path could not be resolved.

dirUnlock Aq Fa dir

Unlock the lock object.

Parameters:

Aq Fa object The object that the lock is set on.

Return Value: One of the following:

0
The action finished successfully.
2
The action failed. Your proccess did not initialize the lock.
3
The directory path could not be resolved.

dirDestroyLock Aq Fa object

Destroys the lock object. After this action the proccess will no longer be able to use the lock object. To use the object after this action is done, one must initialize the lock, using dirInitLock

Parameters:

Aq Fa object The directory that the lock is set on.

Return Value: One of the following:

0
The action finished successfully.
1
The action failed. The directory is locked by your own proccess. Unlock it first.
2
The action failed. Your proccess did not initialize the lock.
3
The directory path could not be resolved.

EXAMPLES

Creating an abstract lock named mylock, with 0.1 second spintime: Locking it: Trying once to lock it again: Trying to lock it again: Unlocking: Destroying the lock: Trying to lock again: Creating a lock on the directory ./mydir, with default spin time:

AUTHORS

An Hai Zaar Aq haizaar@haizaar.com An Gil Ran Aq gil@ran4.net

SEE ALSO

ldbash(1), libbash(1)