Hi Vu,
ack, code review only/Thanks HansN
-----Original Message-----
From: Vu Minh Nguyen <[email protected]>
Sent: den 27 februari 2019 11:48
To: Hans Nordebäck <[email protected]>; Gary Lee
<[email protected]>
Cc: [email protected]; Vu Minh Nguyen
<[email protected]>
Subject: [PATCH 1/1] nid: fix opensafd crashed during start-up [#3013]
There is a dependency b/w svc_monitor_thread and spawn_services.
The coredump happens when spawn_services is executed while the thread has not
yet started. In this case, data is sent to the pipe but no one consumed it.
Later on, reading data from the pipe, will get unexpected data and crash the
program.
This patch ensures the order: svc_monitor_thread must be in ready state before
spawn_services() is executed.
---
src/nid/nodeinit.cc | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/src/nid/nodeinit.cc b/src/nid/nodeinit.cc index
5f15916b4..b4945b05c 100644
--- a/src/nid/nodeinit.cc
+++ b/src/nid/nodeinit.cc
@@ -134,6 +134,7 @@ static int start_monitor_svc(const char *svc);
/* Data declarations for service monitoring */ static int svc_mon_fd = -1;
static int next_svc_fds_slot = 0;
+static bool svc_monitor_thread_running = false;
struct SAFServices {
const std::string fifo_dir = PKGLOCALSTATEDIR; @@ -1517,6 +1518,7 @@ void
*svc_monitor_thread(void *fd) {
next_svc_fds_slot++;
while (true) {
+ svc_monitor_thread_running = true;
unsigned rc = osaf_poll(fds, next_svc_fds_slot, -1);
if (rc > 0) {
// check if any monitored service has exit @@ -1655,6 +1657,15 @@ int
main(int argc, char *argv[]) {
exit(EXIT_FAILURE);
}
+ // Waiting until svc_monitor_thread is up and in ready state.
+ // If spawn_services runs before the thread is in ready state, //
+ receive side of the pipe s_pair will get unexpected data and // may
+ crash the process.
+ while (svc_monitor_thread_running == false) {
+ usleep(100);
+ }
+
+ LOG_NO("svc_monitor_thread is up and in ready state");
if (parse_nodeinit_conf(sbuf) != NCSCC_RC_SUCCESS) {
LOG_ER("Failed to parse file %s. Exiting", sbuf);
exit(EXIT_FAILURE);
--
2.19.2
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel