af_lock, af_unlock, af_testlock - mechanism for reserving update rights
Af_user *af_lock (Af_key *aso, Af_user *locker)
Af_user *af_unlock (Af_key *aso)
Af_user *af_testlock (Af_key *aso)
This manual page describes the interface to the AtFS locking mechanism.
Locks are used to avoid conflicting updates to one object history.
After a user has reserved the update rights, no other user may add new
versions to the reserved history. Reserving the update rights happens
by locking the most recent version of the history. As AtFS allows
adding new versions to each generation in a history, each generation
may be locked separately. Reserving update rights for old generations
(with generation numbers smaller than the newest generation) are
performed by locking the most recent version of the corresponding
generation. Removing an ASO (af_rm - manual page af_files(3)) and
changing an ASO’s version number (af_svnum - manual page af_version(3))
also requires a lock on the corresponding ASO.
af_lock reserves the update permission for the user identified by
locker. On successful completion, a buffer identical to locker is
returned, a NULL pointer otherwise.
af_unlock cancels a formerly established reservation of update rights.
Only the owner or the locker of an ASO (identified by the Af_user
structure that was given to the corresponding call of af_lock) are
allowed to do this. On successful completion, af_unlock returns a
buffer containing the identification of the former locker. This may be
empty, if the ASO was not locked. Upon error, a NULL pointer is
af_testlock returns a buffer containing an identification of the
current locker of the specified ASO. It returns an empty buffer, if no
lock is set.
af_lock and af_unlock return -1 on error and af_errno is set to
indicate the error number.