-rw-r--r-- | src/eyefiworker.cc | 4 | ||||
-rw-r--r-- | src/eyefiworker.h | 1 | ||||
-rw-r--r-- | src/eyetil.h | 5 | ||||
-rw-r--r-- | src/iiid.cc | 4 |
4 files changed, 12 insertions, 2 deletions
diff --git a/src/eyefiworker.cc b/src/eyefiworker.cc index ac75fc1..1979b46 100644 --- a/src/eyefiworker.cc +++ b/src/eyefiworker.cc @@ -30,8 +30,10 @@ eyefiworker::eyefiworker() #error Something is wrong with sigpipe prevention on the platform #endif ; } +eyefiworker::~eyefiworker() { +} int eyefiworker::run(int bindport) { #ifdef HAVE_SQLITE sqlite3_initialize(); @@ -55,9 +57,9 @@ int eyefiworker::run(int bindport) { }else{ syslog(LOG_INFO,"maxrss: %ld\n",ru.ru_maxrss); } #endif /* NDEBUG */ - _exit(0); + throw throwable_exit(0); } close(socket); socket = SOAP_INVALID_SOCKET; } } diff --git a/src/eyefiworker.h b/src/eyefiworker.h index 6d4082c..6cdecff 100644 --- a/src/eyefiworker.h +++ b/src/eyefiworker.h @@ -6,8 +6,9 @@ class eyefiworker : public eyefiService { public: eyefiworker(); + ~eyefiworker(); int run(int port) __attribute__ ((noreturn)); int StartSession(std::string macaddress, std::string cnonce, diff --git a/src/eyetil.h b/src/eyetil.h index eff2c43..03b9ba8 100644 --- a/src/eyetil.h +++ b/src/eyetil.h @@ -6,8 +6,13 @@ #include <archive.h> #include <archive_entry.h> #include "openssl/md5.h" +struct throwable_exit { + int rc; + throwable_exit(int rc_) : rc(rc_) { } +}; + class binary_t : public std::vector<unsigned char> { public: binary_t() { } binary_t(size_type n) : std::vector<unsigned char>(n) { } diff --git a/src/iiid.cc b/src/iiid.cc index d655fe3..b3dd3bf 100644 --- a/src/iiid.cc +++ b/src/iiid.cc @@ -88,9 +88,11 @@ int main(int argc,char **argv) try { eyefiworker().run(port); closelog(); return 0; -} catch(std::exception& e) { +} catch(const throwable_exit& e) { + return e.rc; +} catch(const std::exception& e) { syslog(LOG_CRIT,"Exiting iii daemon, because of error condition"); syslog(LOG_CRIT,"Exception: %s",e.what()); return 1; } |