Mercurial > hg > audiodb
changeset 97:69424e77621f
Clean up a bit better when a server audioDB constructor throws an
exception (or even a char*, as currently).
New cleanup() function, called from the destructor and from catch blocks
in the server constructors.
author | mas01cr |
---|---|
date | Wed, 03 Oct 2007 15:16:47 +0000 |
parents | 8f7d0ae0ede4 |
children | e1dc62a646bf |
files | audioDB.cpp audioDB.h |
diffstat | 2 files changed, 24 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/audioDB.cpp Wed Oct 03 15:15:03 2007 +0000 +++ b/audioDB.cpp Wed Oct 03 15:16:47 2007 +0000 @@ -109,22 +109,31 @@ audioDB::audioDB(const unsigned argc, char* const argv[], adb__queryResult *adbQueryResult): O2_AUDIODB_INITIALIZERS { - processArgs(argc, argv); - isServer = 1; // FIXME: Hack - assert(O2_ACTION(COM_QUERY)); - query(dbName, inFile, adbQueryResult); + try { + processArgs(argc, argv); + isServer = 1; // FIXME: Hack + assert(O2_ACTION(COM_QUERY)); + query(dbName, inFile, adbQueryResult); + } catch(char *err) { + cleanup(); + throw(err); + } } audioDB::audioDB(const unsigned argc, char* const argv[], adb__statusResult *adbStatusResult): O2_AUDIODB_INITIALIZERS { - processArgs(argc, argv); - isServer = 1; // FIXME: Hack - assert(O2_ACTION(COM_STATUS)); - status(dbName, adbStatusResult); + try { + processArgs(argc, argv); + isServer = 1; // FIXME: Hack + assert(O2_ACTION(COM_STATUS)); + status(dbName, adbStatusResult); + } catch(char *err) { + cleanup(); + throw(err); + } } -audioDB::~audioDB(){ - // Clean up +void audioDB::cleanup() { if(indata) munmap(indata,statbuf.st_size); if(db) @@ -137,6 +146,10 @@ delete dbH; } +audioDB::~audioDB(){ + cleanup(); +} + int audioDB::processArgs(const unsigned argc, char* const argv[]){ if(argc<2){
--- a/audioDB.h Wed Oct 03 15:15:03 2007 +0000 +++ b/audioDB.h Wed Oct 03 15:16:47 2007 +0000 @@ -160,6 +160,7 @@ audioDB(const unsigned argc, char* const argv[]); audioDB(const unsigned argc, char* const argv[], adb__queryResult *adbQueryResult); audioDB(const unsigned argc, char* const argv[], adb__statusResult *adbStatusResult); + void cleanup(); ~audioDB(); int processArgs(const unsigned argc, char* const argv[]); void get_lock(int fd, bool exclusive);