osaf/libs/core/common/daemon.c |  8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)


use _Exit instead of exit in daemon_exit. The change was done due to
that exit() is not thread safe, see e.g. ticket #651.
To make it possible to dump e.g. coverage data on termination
a weak reference to __gcov_flush has been added.

diff --git a/osaf/libs/core/common/daemon.c b/osaf/libs/core/common/daemon.c
--- a/osaf/libs/core/common/daemon.c
+++ b/osaf/libs/core/common/daemon.c
@@ -43,6 +43,8 @@
 
 #define DEFAULT_RUNAS_USERNAME "opensaf"
 
+extern  void __gcov_flush(void) __attribute__((weak));
+
 static char __pidfile[NAME_MAX];
 static char __tracefile[NAME_MAX];
 static char __runas_username[UT_NAMESIZE];
@@ -364,7 +366,11 @@ static void sigterm_handler(int sig)
 void daemon_exit(void)
 {
        syslog(LOG_NOTICE, "exiting on signal %d", SIGTERM);
-       exit(0);
+
+       if (__gcov_flush) {
+               __gcov_flush();
+       }
+       _Exit(0);
 }
 
 /**

------------------------------------------------------------------------------
Sponsored by Intel(R) XDK 
Develop, test and display web and hybrid apps with a single code base.
Download it for free now!
http://pubads.g.doubleclick.net/gampad/clk?id=111408631&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to