# HG changeset patch # User mas01cr # Date 1191424607 0 # Node ID 69424e77621fd19f620979164efdb262dbbee3ee # Parent 8f7d0ae0ede40aaee4184f7ff40ec71fa89d1330 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. diff -r 8f7d0ae0ede4 -r 69424e77621f audioDB.cpp --- 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){ diff -r 8f7d0ae0ede4 -r 69424e77621f audioDB.h --- 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);