Commit | Line | Data |
---|---|---|
1479465f GJ |
1 | Frontend Interfaces |
2 | =================== | |
3 | ||
4 | This file will try to document some of the interfaces that dpkg makes | |
5 | available to frontends or that expects them to use, which are currently | |
6 | not covered by any other type of documentation. | |
7 | ||
8 | ||
9 | Database Locking | |
10 | ---------------- | |
11 | ||
12 | Any frontend needing to make sure no write operation is currently happening, | |
13 | should lock the dpkg database by locking the file «<admindir>/lock» using | |
14 | file record locks (i.e. fcntl(2) advisory locking). The whole file should | |
15 | be locked, as that's the most portable way to perform this operation; this | |
16 | can be achieved by using start=0, len=0 and whence=SEEK_SET. | |
17 | ||
18 | Take into account there will be a race condition between the frontend | |
19 | unlocking the database and the invoked dpkg locking it again, in which | |
20 | another process could lock it. | |
21 | ||
22 | In the future this functionality will be available through a shared libdpkg | |
23 | library, and all frontends will be expected to switch to that instead, | |
24 | because this will fix the aforementioned race condition. |