osaf/services/saf/smfsv/smfd/SmfUpgradeProcedure.cc |  48 +++++++++++++++++---
 1 files changed, 41 insertions(+), 7 deletions(-)


diff --git a/osaf/services/saf/smfsv/smfd/SmfUpgradeProcedure.cc 
b/osaf/services/saf/smfsv/smfd/SmfUpgradeProcedure.cc
--- a/osaf/services/saf/smfsv/smfd/SmfUpgradeProcedure.cc
+++ b/osaf/services/saf/smfsv/smfd/SmfUpgradeProcedure.cc
@@ -3137,21 +3137,55 @@ SmfUpgradeProcedure::getImmStepsMergedSi
                addProcStep(newStep);
 
                //Fetch callbacks and procedure init/wraup actions.
+               int initActionId = 1;
+               int wrapupActionId = 1;
                SmfUpgradeCampaign * camp = 
SmfCampaignThread::instance()->campaign()->getUpgradeCampaign();
                const std::vector < SmfUpgradeProcedure * >& procedures = 
camp->getProcedures();
                std::vector < SmfUpgradeProcedure * >::const_iterator proc_iter;
                for (proc_iter = procedures.begin(); proc_iter != 
procedures.end(); proc_iter++) {
-                       
LOG_NO("SmfUpgradeProcedure::getImmStepsMergedSingleStep: Fetch callbacks and 
wrapup actions from  [%s]", (*proc_iter)->getName().c_str());
-
-                       //The init actions
+                       
LOG_NO("SmfUpgradeProcedure::getImmStepsMergedSingleStep: Fetch callbacks and 
wrapup actions from [%s]",
+                              (*proc_iter)->getName().c_str());
+
+                       //The procedure init actions
                        LOG_NO("Copy the procedure init actions");
                        addInitActions((*proc_iter)->getInitActions());
-
-                       //The wrapup actions
+                       std::vector <SmfUpgradeAction*>::const_iterator 
actioniter;
+                       actioniter = getInitActions().begin();
+                       while (actioniter != getInitActions().end()) {
+                               //For the callback actions, set new calback 
procedure pointer
+                               const SmfCallbackAction* cbkAction =
+                                       dynamic_cast<const 
SmfCallbackAction*>(*actioniter);
+                               if (cbkAction != NULL) {
+                                       
const_cast<SmfCallbackAction*>(cbkAction)->setCallbackProcedure(this);
+                               }
+
+                               //Renumber action id aviod DN name collision in 
the merged procedure rollback data
+                               (*actioniter)->changeId(initActionId);
+                               initActionId++;
+
+                               actioniter++;
+                       }
+
+                       //The procedure wrapup actions
                        LOG_NO("Copy the procedure wrapup actions");
                        addWrapupActions((*proc_iter)->getWrapupActions());
-
-                       //The callbacks
+                       actioniter = getWrapupActions().begin();
+                       while (actioniter != getWrapupActions().end()) {
+                               //For the callback actions, set new calback 
procedure pointer
+                               const SmfCallbackAction* cbkAction =
+                                       dynamic_cast<const 
SmfCallbackAction*>(*actioniter);
+                               if (cbkAction != NULL) {
+                                       
const_cast<SmfCallbackAction*>(cbkAction)->setCallbackProcedure(this);
+                               }
+
+                               //Renumber action id aviod DN name collision in 
the merged procedure rollback data
+                               (*actioniter)->changeId(wrapupActionId);
+                               wrapupActionId++;
+
+                               actioniter++;
+                       }
+
+                       //The procedure step callbacks
                        getCallbackList((*proc_iter)->getUpgradeMethod());
                }
         }

------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to