osaf/services/saf/smfsv/smfd/SmfExecControlHdl.cc | 69 ++++++++++++++-------
osaf/services/saf/smfsv/smfd/SmfExecControlHdl.h | 13 +--
osaf/services/saf/smfsv/smfd/SmfUpgradeCampaign.cc | 1 +
3 files changed, 51 insertions(+), 32 deletions(-)
diff --git a/osaf/services/saf/smfsv/smfd/SmfExecControlHdl.cc
b/osaf/services/saf/smfsv/smfd/SmfExecControlHdl.cc
--- a/osaf/services/saf/smfsv/smfd/SmfExecControlHdl.cc
+++ b/osaf/services/saf/smfsv/smfd/SmfExecControlHdl.cc
@@ -41,7 +41,10 @@ SmfExecControlObjHandler::SmfExecControl
m_exec_ctrl_name_ad(0),
m_procExecMode_ad(0),
m_numberOfSingleSteps_ad(0),
- m_nodesForSingleStep_ad(0)
+ m_nodesForSingleStep_ad(0),
+ m_omHandle(0),
+ m_ownerHandle(0),
+ m_ccbHandle(0)
{
p_immutil_object = new SmfImmUtils; // Deleted by uninstall and in destructor
}
@@ -57,8 +60,10 @@ SmfExecControlObjHandler::~SmfExecContro
// overwritten the next time a copy has to be created
//
TRACE_ENTER();
- if (p_immutil_object != 0)
+ if (p_immutil_object != NULL) {
delete p_immutil_object;
+ p_immutil_object = NULL;
+ }
TRACE_LEAVE();
}
@@ -94,8 +99,10 @@ bool SmfExecControlObjHandler::install()
void SmfExecControlObjHandler::uninstall() {
TRACE_ENTER();
- if (p_immutil_object != 0)
+ if (p_immutil_object != NULL) {
delete p_immutil_object;
+ p_immutil_object = NULL;
+ }
removeExecControlObjectCopy();
TRACE_LEAVE();
}
@@ -311,6 +318,20 @@ void SmfExecControlObjHandler::removeExe
TRACE("Deleting object '%s'", c_openSafSmfExecControl_copy);
+ if (createImmOmHandles() == false) {
+ TRACE("createCcbHandle Fail");
+ }
+
+ const SaNameT *names[2];
+ names[0] = &node_name;
+ names[1] = NULL;
+ ais_rc = immutil_saImmOmAdminOwnerSet(m_ownerHandle, names, SA_IMM_ONE);
+
+ if (ais_rc != SA_AIS_OK) {
+ LOG_NO("%s - saImmOmAdminOwnerSet FAILED: %s",
+ __FUNCTION__, saf_error(ais_rc));
+ }
+
ais_rc = immutil_saImmOmCcbObjectDelete(m_ccbHandle,
&node_name);
if (ais_rc != SA_AIS_OK) {
@@ -325,6 +346,8 @@ void SmfExecControlObjHandler::removeExe
}
}
+ finalizeImmOmHandles();
+
TRACE_LEAVE();
}
@@ -344,10 +367,8 @@ bool SmfExecControlObjHandler::copyExecC
// ------------------------------------
// Create handles needed
//
- rc = createAllImmHandles();
- if (rc == false) {
- LOG_NO("%s: createAllImmHandles Fail", __FUNCTION__);
- return rc;
+ if (createImmOmHandles() == false) {
+ TRACE("createCcbHandle Fail");
}
// ------------------------------------
@@ -398,6 +419,7 @@ bool SmfExecControlObjHandler::copyExecC
}
}
+ finalizeImmOmHandles();
TRACE_LEAVE();
return rc;
}
@@ -428,7 +450,7 @@ void SmfExecControlObjHandler::saveAttri
*
* @return false on Fail
*/
-bool SmfExecControlObjHandler::createAllImmHandles() {
+bool SmfExecControlObjHandler::createImmOmHandles() {
SaAisErrorT ais_rc = SA_AIS_ERR_TRY_AGAIN;
int timeout_try_cnt = 6;
bool rc = true;
@@ -448,23 +470,6 @@ bool SmfExecControlObjHandler::createAll
rc = false;
}
- // Accessors handle
- if (rc == true) {
- timeout_try_cnt = 6;
- while (timeout_try_cnt > 0) {
- ais_rc = immutil_saImmOmAccessorInitialize(m_omHandle,
- &m_accessorHandle);
- if (ais_rc != SA_AIS_ERR_TIMEOUT)
- break;
- timeout_try_cnt--;
- }
- if (ais_rc != SA_AIS_OK) {
- LOG_NO("%s: saImmOmAccessorInitialize Fail %s",
- __FUNCTION__, saf_error(ais_rc));
- rc = false;
- }
- }
-
// Admin owner handle
if (rc == true) {
timeout_try_cnt = 6;
@@ -504,3 +509,17 @@ bool SmfExecControlObjHandler::createAll
TRACE_LEAVE();
return rc;
}
+
+void SmfExecControlObjHandler::finalizeImmOmHandles() {
+ if (m_omHandle != 0) {
+ SaAisErrorT ais_rc = immutil_saImmOmFinalize(m_omHandle);
+ if (ais_rc != SA_AIS_OK) {
+ LOG_NO("%s: immutil_saImmOmFinalize Fail %s",
+ __FUNCTION__, saf_error(ais_rc));
+ }
+ }
+
+ m_omHandle = 0;
+ m_ownerHandle = 0;
+ m_ccbHandle = 0;
+}
diff --git a/osaf/services/saf/smfsv/smfd/SmfExecControlHdl.h
b/osaf/services/saf/smfsv/smfd/SmfExecControlHdl.h
--- a/osaf/services/saf/smfsv/smfd/SmfExecControlHdl.h
+++ b/osaf/services/saf/smfsv/smfd/SmfExecControlHdl.h
@@ -85,7 +85,8 @@ class SmfExecControlObjHandler {
bool readOpenSafSmfConfig();
bool copyExecControlObject();
void removeExecControlObjectCopy();
- bool createAllImmHandles();
+ bool createImmOmHandles();
+ void finalizeImmOmHandles();
void saveAttributeDescriptors();
@@ -104,7 +105,7 @@ class SmfExecControlObjHandler {
// For OpenSafSmfExecControl object copy
- const char* c_openSafSmfExecControl_copy = "openSafSmfExecControl_copy";
+ const char* c_openSafSmfExecControl_copy =
"openSafSmfExecControl=SmfHdlCopy";
SaImmAttrValuesT_2 **m_attributes;
SaImmAttrValuesT_2 *m_exec_ctrl_name_ad;
SaImmAttrValuesT_2 *m_procExecMode_ad;
@@ -114,11 +115,9 @@ class SmfExecControlObjHandler {
// For storing IMM handles
const SaVersionT m_immVersion {'A', 2, 1};
- SaImmHandleT m_omHandle {0};
- SaImmAdminOwnerHandleT m_ownerHandle {0};
- SaImmCcbHandleT m_ccbHandle {0};
- SaImmAccessorHandleT m_accessorHandle {0};
-
+ SaImmHandleT m_omHandle;
+ SaImmAdminOwnerHandleT m_ownerHandle;
+ SaImmCcbHandleT m_ccbHandle;
DELETE_COPY_AND_MOVE_OPERATORS(SmfExecControlObjHandler);
};
diff --git a/osaf/services/saf/smfsv/smfd/SmfUpgradeCampaign.cc
b/osaf/services/saf/smfsv/smfd/SmfUpgradeCampaign.cc
--- a/osaf/services/saf/smfsv/smfd/SmfUpgradeCampaign.cc
+++ b/osaf/services/saf/smfsv/smfd/SmfUpgradeCampaign.cc
@@ -93,6 +93,7 @@ SmfUpgradeCampaign::~SmfUpgradeCampaign(
}
m_originalProcedures.clear();
+ m_execControlHdl->uninstall();
delete m_execControlHdl;
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel