Frontend Interfaces
===================

This file will try to document some of the interfaces that dpkg makes
available to frontends or that expects them to use, which are currently
not covered by any other type of documentation.


Database Locking
----------------

Any frontend needing to make sure no write operation is currently happening,
should lock the dpkg database by locking the file «<admindir>/lock» using
file record locks (i.e. fcntl(2) advisory locking). The whole file should
be locked, as that's the most portable way to perform this operation; this
can be achieved by using start=0, len=0 and whence=SEEK_SET.

Take into account there will be a race condition between the frontend
unlocking the database and the invoked dpkg locking it again, in which
another process could lock it.

In the future this functionality will be available through a shared libdpkg
library, and all frontends will be expected to switch to that instead,
because this will fix the aforementioned race condition.
