Hi Ramesh and Mahesh, a gentle reminder for review.
/Thanks HansN -----Original Message----- From: Hans Nordeback [mailto:hans.nordeb...@ericsson.com] Sent: den 10 februari 2017 09:57 To: Anders Widell <anders.wid...@ericsson.com>; ramesh.bet...@oracle.com; mahesh.va...@oracle.com Cc: opensaf-devel@lists.sourceforge.net Subject: [devel] [PATCH 1 of 1] nid: nodeinit may crash when exit is called from the main thread [#2294] src/nid/nodeinit.cc | 52 ++++++++++++++++++++++++++++++---------------------- 1 files changed, 30 insertions(+), 22 deletions(-) diff --git a/src/nid/nodeinit.cc b/src/nid/nodeinit.cc --- a/src/nid/nodeinit.cc +++ b/src/nid/nodeinit.cc @@ -130,26 +130,31 @@ static int start_monitor_svc(const char static int svc_mon_fd = -1; static int next_svc_fds_slot = 0; -struct SvcMap { - std::string nid_name; - std::string fifo_file; - int fifo_fd; +struct SAFServices { + const std::string fifo_dir = PKGLOCALSTATEDIR; + struct SvcMap { + const std::string nid_name; + const std::string fifo_file; + int fifo_fd; + }; + + std::vector<SvcMap> svc_map = { + {"AMFD", "osafamfd.fifo", -1}, + {"TRANSPORT", "osaftransportd.fifo", -1}, + {"CLMNA", "osafclmna.fifo", -1}, + {"RDED", "osafrded.fifo", -1}, + {"HLFM", "osaffmd.fifo", -1}, + {"IMMD", "osafimmd.fifo", -1}, + {"IMMND", "osafimmnd.fifo", -1}, + {"LOGD", "osaflogd.fifo", -1}, + {"NTFD", "osafntfd.fifo", -1}, + {"PLMD", "osafplmd.fifo", -1}, + {"CLMD", "osafclmd.fifo", -1} + }; }; -static std::vector<SvcMap> svc_map = { - {"AMFD", "osafamfd.fifo", -1}, - {"TRANSPORT", "osaftransportd.fifo", -1}, - {"CLMNA", "osafclmna.fifo", -1}, - {"RDED", "osafrded.fifo", -1}, - {"HLFM", "osaffmd.fifo", -1}, - {"IMMD", "osafimmd.fifo", -1}, - {"IMMND", "osafimmnd.fifo", -1}, - {"LOGD", "osaflogd.fifo", -1}, - {"NTFD", "osafntfd.fifo", -1}, - {"PLMD", "osafplmd.fifo", -1}, - {"CLMD", "osafclmd.fifo", -1} -}; -static const std::string fifo_dir = PKGLOCALSTATEDIR; +static SAFServices *services_ = nullptr; + const int kMaxNumOfFds = 40; const int kTenSecondsInMilliseconds = 10000; @@ -1412,9 +1417,9 @@ int handle_data_request(struct pollfd *f TRACE_ENTER2("service: %s", nid_name.c_str()); - for (auto &svc : svc_map) { + for (auto &svc : services_->svc_map) { if (nid_name == svc.nid_name) { - std::string fifo_file = fifo_dir + "/" + svc.fifo_file; + std::string fifo_file = services_->fifo_dir + "/" + + svc.fifo_file; notify_rc = file_notify.WaitForFileCreation(fifo_file, kTenSecondsInMilliseconds); if (notify_rc != base::FileNotify::FileNotifyErrors::kOK) { @@ -1460,7 +1465,7 @@ int handle_data_request(struct pollfd *f std::string get_svc_name(int fd) { std::string svc_name; - for (auto const& svc : svc_map) { + for (auto const& svc : services_->svc_map) { if (fd == svc.fifo_fd) { svc_name = svc.nid_name; break; @@ -1498,7 +1503,10 @@ void* svc_monitor_thread(void *fd) { FD_SVC_MON_THR = 0 }; - struct pollfd *fds; + struct pollfd *fds {nullptr}; + + services_ = new SAFServices; + osafassert(services_ != nullptr); fds = new pollfd[kMaxNumOfFds]; osafassert(fds != nullptr); ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel