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

Reply via email to