lockfile API
============

The lockfile API serves two purposes:

* Mutual exclusion.  When we write out a new index file, first
  we create a new file `$GIT_DIR/index.lock`, write the new
  contents into it, and rename it to the final destination
  `$GIT_DIR/index`.  We try to create the `$GIT_DIR/index.lock`
  file with O_EXCL so that we can notice and fail when somebody
  else is already trying to update the index file.

* Automatic cruft removal.  After we create the "lock" file, we
  may decide to `die()`, and we would want to make sure that we
  remove the file that has not been committed to its final
  destination.  This is done by remembering the lockfiles we
  created in a linked list and cleaning them up from an
  `atexit(3)` handler.  Outstanding lockfiles are also removed
  when the program dies on a signal.


The functions
-------------

hold_lock_file_for_update::

	Take a pointer to `struct lock_file`, the filename of
	the final destination (e.g. `$GIT_DIR/index`) and a flag
	`die_on_error`.  Attempt to create a lockfile for the
	destination and return the file descriptor for writing
	to the file.  If `die_on_error` flag is true, it dies if
	a lock is already taken for the file; otherwise it
	returns a negative integer to the caller on failure.

commit_lock_file::

	Take a pointer to the `struct lock_file` initialized
	with an earlier call to `hold_lock_file_for_update()`,
	close the file descriptor and rename the lockfile to its
	final destination.  Returns 0 upon success, a negative
	value on failure to close(2) or rename(2).

rollback_lock_file::

	Take a pointer to the `struct lock_file` initialized
	with an earlier call to `hold_lock_file_for_update()`,
	close the file descriptor and remove the lockfile.

close_lock_file::
	Take a pointer to the `struct lock_file` initialized
	with an earlier call to `hold_lock_file_for_update()`,
	and close the file descriptor.  Returns 0 upon success,
	a negative value on failure to close(2).

Because the structure is used in an `atexit(3)` handler, its
storage has to stay throughout the life of the program.  It
cannot be an auto variable allocated on the stack.

Call `commit_lock_file()` or `rollback_lock_file()` when you are
done writing to the file descriptor.  If you do not call either
and simply `exit(3)` from the program, an `atexit(3)` handler
will close and remove the lockfile.

If you need to close the file descriptor you obtained from
`hold_lock_file_for_update` function yourself, do so by calling
`close_lock_file()`.  You should never call `close(2)` yourself!
Otherwise the `struct
lock_file` structure still remembers that the file descriptor
needs to be closed, and a later call to `commit_lock_file()` or
`rollback_lock_file()` will result in duplicate calls to
`close(2)`.  Worse yet, if you `close(2)`, open another file
descriptor for completely different purpose, and then call
`commit_lock_file()` or `rollback_lock_file()`, they may close
that unrelated file descriptor.
