summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--src/eyefiworker.cc4
-rw-r--r--src/eyefiworker.h1
-rw-r--r--src/eyetil.h5
-rw-r--r--src/iiid.cc4
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;
}