osaf/libs/common/glsv/include/gld.h | 2 ++
osaf/services/saf/glsv/gld/gld_api.c | 30 ++++++++++++++++++++++--------
osaf/services/saf/glsv/gld/gld_main.c | 1 -
3 files changed, 24 insertions(+), 9 deletions(-)
All core services and cpsv now register for a common sigterm handler.
This patch series takes a stab at the optional services
diff --git a/osaf/libs/common/glsv/include/gld.h
b/osaf/libs/common/glsv/include/gld.h
--- a/osaf/libs/common/glsv/include/gld.h
+++ b/osaf/libs/common/glsv/include/gld.h
@@ -78,4 +78,6 @@ typedef enum {
#include "saImmOi.h"
#include "immutil.h"
+#include <daemon.h>
+
#endif /* !GLD_H */
diff --git a/osaf/services/saf/glsv/gld/gld_api.c
b/osaf/services/saf/glsv/gld/gld_api.c
--- a/osaf/services/saf/glsv/gld/gld_api.c
+++ b/osaf/services/saf/glsv/gld/gld_api.c
@@ -32,13 +32,17 @@ uint32_t gl_gld_hdl;
void gld_main_process(SYSF_MBX *mbx);
-#define FD_AMF 0
-#define FD_MBCSV 1
-#define FD_MBX 2
-#define FD_IMM 3 /* Must be the last in the fds array */
+enum {
+ FD_TERM = 0,
+ FD_AMF,
+ FD_MBCSV,
+ FD_MBX,
+ FD_IMM,
+ NUM_FD
+};
-static struct pollfd fds[4];
-static nfds_t nfds = 4;
+static struct pollfd fds[5];
+static nfds_t nfds = 5;
/****************************************************************************
* Name : ncs_glsv_gld_lib_req
@@ -475,6 +479,8 @@ void gld_main_process(SYSF_MBX *mbx)
GLSV_GLD_CB *gld_cb = NULL;
NCS_MBCSV_ARG mbcsv_arg;
SaSelectionObjectT amf_sel_obj;
+ int term_fd;
+
TRACE_ENTER();
if ((gld_cb = (GLSV_GLD_CB *)ncshm_take_hdl(NCS_SERVICE_ID_GLD,
gl_gld_hdl))
@@ -491,7 +497,11 @@ void gld_main_process(SYSF_MBX *mbx)
goto end;
}
+ daemon_sigterm_install(&term_fd);
+
/* Set up all file descriptors to listen to */
+ fds[FD_TERM].fd = term_fd;
+ fds[FD_TERM].events = POLLIN;
fds[FD_AMF].fd = amf_sel_obj;
fds[FD_AMF].events = POLLIN;
fds[FD_MBCSV].fd = gld_cb->mbcsv_sel_obj;
@@ -505,9 +515,9 @@ void gld_main_process(SYSF_MBX *mbx)
if ((gld_cb->immOiHandle != 0) && (gld_cb->is_impl_set ==
true)){
fds[FD_IMM].fd = gld_cb->imm_sel_obj;
fds[FD_IMM].events = POLLIN;
- nfds = FD_IMM + 1;
+ nfds = NUM_FD;
} else {
- nfds = FD_IMM;
+ nfds = NUM_FD - 1;
}
int ret = poll(fds, nfds, -1);
@@ -520,6 +530,10 @@ void gld_main_process(SYSF_MBX *mbx)
break;
}
+ if (fds[FD_TERM].revents & POLLIN) {
+ daemon_exit();
+ }
+
if (fds[FD_AMF].revents & POLLIN) {
if (gld_cb->amf_hdl != 0) {
/* dispatch all the AMF pending function */
diff --git a/osaf/services/saf/glsv/gld/gld_main.c
b/osaf/services/saf/glsv/gld/gld_main.c
--- a/osaf/services/saf/glsv/gld/gld_main.c
+++ b/osaf/services/saf/glsv/gld/gld_main.c
@@ -18,7 +18,6 @@
#include <ncssysf_tsk.h>
#include <logtrace.h>
-#include <daemon.h>
#include "gld.h"
extern void gld_main_process(SYSF_MBX *);
------------------------------------------------------------------------------
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121054471&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel