Mercurial > hg > audiodb
diff audioDB.h @ 392:78fed0d4c108 api-inversion
Include some necessary information in struct adb.
Now the struct adb contains a database fd, the flags used to open that
fd (so that we can later tell if it was for write or not) and a database
header pointer.
audiodb_open() is now responsible for filling in all of that
information. To do that, it needs to take an open(2) flag; that's good,
because it means that the call to open(2) is no longer invoking
undefined behaviour. (Also, the previous version of audiodb_open()
leaked an fd). Unfortunately, that means we have broken ABI and API
compatibility. (Fortunately, we have fewer than 12 users).
Use audiodb_open() in audioDB::initDBHeader().
We've temporarily(?) put acquire_lock(int, bool) in the API header; that
means we need to include <stdbool.h> and compile C files with -std=c99.
Do so.
Make audiodb_close() free resources allocated by audiodb_open().
Include a struct adb * field in the audioDB C++ object...
... which lets us actually implement memory-correctness, by
audiodb_close()ing the database in audioDB::cleanup().
[ The lock is, I think, correctly disposed of; man fcntl(2) on Linux
says that the locks are released once any file descriptor relating to
the file is closed, and we close the fd in audiodb_close(). ]
author | mas01cr |
---|---|
date | Mon, 24 Nov 2008 15:42:15 +0000 |
parents | 2d5c3f8e8c22 |
children | fd9b65e5ca95 |
line wrap: on
line diff
--- a/audioDB.h Mon Nov 24 12:50:38 2008 +0000 +++ b/audioDB.h Mon Nov 24 15:42:15 2008 +0000 @@ -254,6 +254,7 @@ char* indata; struct stat statbuf; dbTableHeaderPtr dbH; + struct adb *adb; gsl_rng *rng; @@ -462,6 +463,7 @@ db(0), \ indata(0), \ dbH(0), \ + adb(0), \ rng(0), \ fileTable(0), \ trackTable(0), \