src/smf/smfd/SmfCampaignThread.cc | 16 ++++++++++------ 1 files changed, 10 insertions(+), 6 deletions(-)
smfd core dumps during commit of campaign. If an AMF SU under maintenance fails right as the campaign commit is done, there is a race condition present. Before SMF clears the suMaintenaceCampaign attribute of the SU, if the SU fails, it will send a notification. Meanwhile, the commit deletes upgrade campaign pointer inside smfd. If the deletion of the campaign pointer inside smfd occurs before it receives the NTF event a crash will occur because the campaign pointer is gone. Solution is to always process NTF events before processing the termination of the campaign. The campaign termination code sets "m_running" to false, and deletes the pointer. This should always be last in the poll loop so that the loop will exit immediately without processing any NTF events (or other future events.) diff --git a/src/smf/smfd/SmfCampaignThread.cc b/src/smf/smfd/SmfCampaignThread.cc --- a/src/smf/smfd/SmfCampaignThread.cc +++ b/src/smf/smfd/SmfCampaignThread.cc @@ -907,12 +907,10 @@ int SmfCampaignThread::handleEvents(void break; } - /* Process the Mail box events */ - if (fds[0].revents & POLLIN) { - /* dispatch MBX events */ - processEvt(); - } - + /* + * Handle NTF events first because processEvt may delete and terminate the + * campaign thread. + */ if (fds[1].revents & POLLIN) { // dispatch NTF events rc = saNtfDispatch(m_ntfHandle, SA_DISPATCH_ALL); @@ -922,6 +920,12 @@ int SmfCampaignThread::handleEvents(void } } + /* Process the Mail box events */ + if (fds[0].revents & POLLIN) { + /* dispatch MBX events */ + processEvt(); + } + m_campaign->updateElapsedTime(); } TRACE_LEAVE(); ------------------------------------------------------------------------------ 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