Hi Canh,

ack from me with a minor comment, code review only

Thanks

Minh


On 07/06/18 16:38, Canh Van Truong wrote:
Update to use dynamic varibale for operation invoked name in each CCB,
instead of using one global name for all CCB
---
  src/ntf/ntfimcnd/ntfimcn_imm.c | 67 ++++++++++++++++++------------------------
  1 file changed, 29 insertions(+), 38 deletions(-)

diff --git a/src/ntf/ntfimcnd/ntfimcn_imm.c b/src/ntf/ntfimcnd/ntfimcn_imm.c
index d8084b646..c13cc399e 100644
--- a/src/ntf/ntfimcnd/ntfimcn_imm.c
+++ b/src/ntf/ntfimcnd/ntfimcn_imm.c
@@ -71,23 +71,11 @@ struct s_get_created_dn {
        SaNameT objectName;
  } s_get_created_dn;
-/* Used with function get_operation_invoke_name_create() */
-struct {
-       SaNameT iname;
-       SaNameT *iname_ptr;
-
-} s_get_operation_invoke_name_create;
-
-/* Used with function get_operation_invoke_name_modify() --*/
-struct {
-       SaNameT iname;
-       SaNameT *iname_ptr;
-} s_get_operation_invoke_name_modify;
-
  #define NOTIFYING_OBJECT "safApp=safImmService"
static bool initializeImmOmHandle(SaImmHandleT* immOmHandle);
  static void finalizeImmOmHandle(SaImmHandleT immOmHandle);
+static void free_ccb_data(CcbUtilCcbData_t *ccb_data);
/**
   * Get a class description for the given className
@@ -288,12 +276,25 @@ static SaNameT *get_created_dn(const SaImmClassNameT 
className,
        return &s_get_created_dn.objectName;
  }
+/**
+ * Free memory for CcbUtilCcbData
+ *
+ * @param ccb_data[in]
+ *
+ * @return None
+ */
+static void free_ccb_data(CcbUtilCcbData_t *ccb_data) {
+       if (ccb_data != NULL) {
+               osaf_extended_name_free(ccb_data->userData);
+               if (ccb_data->userData != NULL) free(ccb_data->userData);
[Minh]: osaf_extended_name_free() does check its parameter agains null, but to be safe, I think we only call osaf_extended_name_free inside *if* condition
+               ccbutil_deleteCcbData(ccb_data);
+       }
+}
+
  /**
   * Get the operation invoker name.
   * If ccb id is 0 or >0 return the value in SaImmAttrImplementerName or
   * SaImmAttrAdminOwnerName respective
- * Note:
- * Uses in file global struct s_get_operation_invoke_name_create
   *
   * @param ccbId[in]
   * @param attr[in]
@@ -307,12 +308,10 @@ get_operation_invoke_name_create(SaImmOiCcbIdT ccbId,
  {
        int i = 0;
        char *attrName;
+       SaNameT* operation_invoke_name = NULL;
TRACE_ENTER(); - s_get_operation_invoke_name_create.iname_ptr =
-           &s_get_operation_invoke_name_create.iname;
-
        if (ccbId == 0) {
                attrName = NTFIMCN_IMPLEMENTER_NAME;
        } else {
@@ -320,13 +319,12 @@ get_operation_invoke_name_create(SaImmOiCcbIdT ccbId,
        }
/* Get the value from Admin owner name or Implementer name */
-       osaf_extended_name_free(&s_get_operation_invoke_name_create.iname);
-       osaf_extended_name_clear(&s_get_operation_invoke_name_create.iname);
+       operation_invoke_name = malloc(sizeof(SaNameT));
        for (i = 0; attr[i] != NULL; i++) {
                if (strcmp(attr[i]->attrName, attrName) == 0) {
                        osaf_extended_name_alloc(
                            *((char **)attr[i]->attrValues[0]),
-                           &s_get_operation_invoke_name_create.iname);
+                           operation_invoke_name);
                        goto done;
                }
        }
@@ -336,7 +334,7 @@ get_operation_invoke_name_create(SaImmOiCcbIdT ccbId,
done:
        TRACE_LEAVE();
-       return s_get_operation_invoke_name_create.iname_ptr;
+       return operation_invoke_name;
  }
/**
@@ -344,8 +342,6 @@ done:
   * If ccb id is 0 or >0 return the value in SaImmAttrImplementerName or
   * SaImmAttrAdminOwnerName respective.
   *
- * Note:
- *
   * @param ccbId[in]
   * @param attrMods[in]
   *
@@ -358,12 +354,10 @@ get_operation_invoke_name_modify(SaImmOiCcbIdT ccbId,
  {
        int i = 0;
        char *attrName;
+       SaNameT* operation_invoke_name = NULL;
TRACE_ENTER(); - s_get_operation_invoke_name_modify.iname_ptr =
-           &s_get_operation_invoke_name_modify.iname;
-
        if (ccbId == 0) {
                attrName = NTFIMCN_IMPLEMENTER_NAME;
        } else {
@@ -371,13 +365,12 @@ get_operation_invoke_name_modify(SaImmOiCcbIdT ccbId,
        }
/* Get the value from Admin owner name or Implementer name */
-       osaf_extended_name_free(&s_get_operation_invoke_name_modify.iname);
-       osaf_extended_name_clear(&s_get_operation_invoke_name_modify.iname);
+       operation_invoke_name = malloc(sizeof(SaNameT));
        for (i = 0; attrMods[i] != NULL; i++) {
                if (strcmp(attrMods[i]->modAttr.attrName, attrName) == 0) {
                        osaf_extended_name_alloc(
                            *((char **)attrMods[i]->modAttr.attrValues[0]),
-                           &s_get_operation_invoke_name_modify.iname);
+                           operation_invoke_name);
                        goto done;
                }
        }
@@ -387,7 +380,7 @@ get_operation_invoke_name_modify(SaImmOiCcbIdT ccbId,
done:
        TRACE_LEAVE();
-       return s_get_operation_invoke_name_modify.iname_ptr;
+       return operation_invoke_name;
  }
/**
@@ -435,7 +428,7 @@ static SaAisErrorT 
saImmOiCcbObjectDeleteCallback(SaImmOiHandleT immOiHandle,
                        goto done;
                }
- ccbutil_deleteCcbData(ccbUtilCcbData);
+               free_ccb_data(ccbUtilCcbData);
if (internal_rc != 0) {
                        LOG_ER("%s send_object_create_notification fail",
@@ -514,7 +507,7 @@ saImmOiCcbObjectCreateCallback(SaImmOiHandleT immOiHandle, 
SaImmOiCcbIdT ccbId,
                internal_rc = ntfimcn_send_object_create_notification(
                    ccbUtilOperationData, rdn_attr_name, SA_FALSE);
- ccbutil_deleteCcbData(ccbUtilCcbData);
+               free_ccb_data(ccbUtilCcbData);
if (internal_rc != 0) {
                        LOG_ER("%s send_object_create_notification fail",
@@ -578,7 +571,7 @@ saImmOiCcbObjectModifyCallback(SaImmOiHandleT immOiHandle, 
SaImmOiCcbIdT ccbId,
                internal_rc = ntfimcn_send_object_modify_notification(
                    ccbUtilOperationData, invoker_name_ptr, SA_FALSE);
- ccbutil_deleteCcbData(ccbUtilCcbData);
+               free_ccb_data(ccbUtilCcbData);
if (internal_rc != 0) {
                        LOG_ER("%s send_object_modify_notification fail",
@@ -613,7 +606,7 @@ static void saImmOiCcbAbortCallback(SaImmOiHandleT 
immOiHandle,
        TRACE_ENTER();
if ((ccbUtilCcbData = ccbutil_findCcbData(ccbId)) != NULL) {
-               ccbutil_deleteCcbData(ccbUtilCcbData);
+               free_ccb_data(ccbUtilCcbData);
        } else {
                LOG_ER("%s: Failed to find CCB object for ccb Id %llu",
                       __FUNCTION__, ccbId);
@@ -723,9 +716,7 @@ static void saImmOiCcbApplyCallback(SaImmOiHandleT 
immOiHandle,
        }
done:
-       if (ccbUtilCcbData != NULL) {
-               ccbutil_deleteCcbData(ccbUtilCcbData);
-       }
+       free_ccb_data(ccbUtilCcbData);
        TRACE_LEAVE();
        if (internal_rc != 0) {
                /* If we fail to send a notification we exit. This will signal


------------------------------------------------------------------------------
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