Fix memory leak & build warning
authorsaerome.kim <saerome.kim@samsung.com>
Tue, 9 Jan 2018 11:19:12 +0000 (20:19 +0900)
committersaerome.kim <saerome.kim@samsung.com>
Mon, 2 Jul 2018 10:38:38 +0000 (19:38 +0900)
Signed-off-by: saerome.kim <saerome.kim@samsung.com>
src/d2d-subowner/d2ds-subowner.c

index 082c73cb95c31a2d6567872148274e33a1d7db99..583e5e5739cf3081303f05268f697c3a10a66fce 100644 (file)
@@ -97,8 +97,8 @@ typedef struct {
        int permission;/**< Permision */
 
        /* For CRED provisioning */
-       OCProvisionDev_t *dev1; /**< 1st device for CRED provisiong */
-       OCProvisionDev_t *dev2; /**< 2nd device for CRED provisiong  */
+       gchar  *uuid_dev1; /**< 1st device for CRED provisiong */
+       gchar  *uuid_dev2; /**< 2nd device for CRED provisiong  */
 } d2ds_req_cb_s;
 
 typedef struct _d2ds_subowner {
@@ -380,7 +380,7 @@ static int _wait_cb_ret(int msec)
 {
        OCStackResult ret = OC_STACK_OK;
 
-       d2ds_check_null_ret("g_client", g_client);
+       d2ds_check_null_ret_error("g_client", g_client, OC_STACK_INVALID_PARAM);
 
        for (int i=0; !g_client->g_doneCB && msec > i; ++i) {
                usleep(1000);
@@ -569,6 +569,12 @@ static void _request_cleanup(gpointer data)
        if (con->uuid_target_str) {
                g_free(con->uuid_target_str);
        }
+       if (con->uuid_dev1) {
+               g_free(con->uuid_dev1);
+       }
+       if (con->uuid_dev2) {
+               g_free(con->uuid_dev2);
+       }
 
        /* Set d2ds status 'pending' */
        g_atomic_int_set(&service->pending, 0);
@@ -717,7 +723,7 @@ static void __notify_found_devs(void  *data)
 static gpointer _disc_mot_env_devs_func(gpointer data)
 {
        d2ds_req_cb_s *con = (d2ds_req_cb_s *)data;
-       d2ds_check_null_ret("con", con);
+       d2ds_check_null_ret_error("con", con, NULL);
 
        /* delete un/owned device lists before updating them */
        _remove_mot_client();
@@ -1376,21 +1382,47 @@ static gpointer _cred_provisioning_func(gpointer data)
        OCStackResult ret = OC_STACK_OK;
        d2ds_req_cb_s *con = (d2ds_req_cb_s *)data;
 
-       if (!con->dev1 ) {
+       OicUuid_t *uuid = NULL;
+       OCProvisionDev_t *dev1 = NULL;
+       OCProvisionDev_t *dev2 = NULL;
+
+       if (!con->uuid_dev1 ) {
                D2DS_LOGE("dev1 is NULL");
-               return NULL;
+               goto PVPWS_ERROR;
        }
-       if (!con->dev2) {
-               D2DS_LOGE("dev1 is NULL");
-               return NULL;
+       if (!con->uuid_dev2) {
+               D2DS_LOGE("dev2 is NULL");
+               goto PVPWS_ERROR;
        }
 
+       uuid = _convert_uuid(con->uuid_dev1);
+       dev1 = _get_dev_by_uuid(g_client->g_mowned_list, uuid);
+       if (!dev1) {
+               D2DS_LOGE("We can't find in MOWNED dev list");
+               goto PVPWS_ERROR;
+       }
+       g_free(uuid);
+
+       uuid = _convert_uuid(con->uuid_dev2);
+       dev2 = _get_dev_by_uuid(g_client->g_mowned_list, uuid);
+       if (!dev2) {
+               D2DS_LOGE("We can't find in MOWNED dev list");
+               goto PVPWS_ERROR;
+       }
+       g_free(uuid);
+
+       /* To do ACL provisioning only one */
+       dev1->next = NULL;
+
+       /* To do ACL provisioning only one */
+       dev2->next = NULL;
+
        g_client->g_doneCB = false;
 
        D2DS_LOGI("Provisioning Selected Pairwise Devices..");
        ret = OCProvisionCredentials((void*) g_client,
                SYMMETRIC_PAIR_WISE_KEY, OWNER_PSK_LENGTH_128,
-               con->dev1, con->dev2, _provision_cred_cb);
+               dev1, dev2, _provision_cred_cb);
        if (OC_STACK_OK != ret)  {
                D2DS_LOGD( "OCProvisionPairwiseDevices API error: %d (%s)", ret, _error_to_string(ret));
                goto PVPWS_ERROR;
@@ -1411,6 +1443,8 @@ PVPWS_ERROR:
        /* Notify ACL result  */
        net_d2ds_emit_prov_cred_done(d2ds_dbus_get_object(), (int)ret);
 
+       if (uuid)
+               g_free(uuid);
        _request_cleanup(con);
 
        g_thread_exit(GINT_TO_POINTER (1));
@@ -1421,11 +1455,6 @@ PVPWS_ERROR:
 static int _provisioning_cred(d2ds_service *service,
        gchar *uuid_dev1, gchar *uuid_dev2)
 {
-
-       OicUuid_t *uuid = NULL;
-       OCProvisionDev_t *dev1 = NULL;
-       OCProvisionDev_t *dev2 = NULL;
-
        d2ds_req_cb_s *con = NULL;
        con = g_malloc0(sizeof(d2ds_req_cb_s));
        if (!con) {
@@ -1444,34 +1473,8 @@ static int _provisioning_cred(d2ds_service *service,
                return D2DS_ERROR_INVALID_PARAMETER;
        }
 
-       uuid = _convert_uuid(uuid_dev1);
-       dev1 = _get_dev_by_uuid(g_client->g_mowned_list, uuid);
-       if (!dev1) {
-               D2DS_LOGE("We can't find in MOWNED dev list");
-               g_free(uuid);
-               _request_cleanup(con);
-               return D2DS_ERROR_NO_DATA;
-       }
-       g_free(uuid);
-
-       uuid = _convert_uuid(uuid_dev2);
-       dev2 = _get_dev_by_uuid(g_client->g_mowned_list, uuid);
-       if (!dev2) {
-               D2DS_LOGE("We can't find in MOWNED dev list");
-               g_free(uuid);
-               _request_cleanup(con);
-               return D2DS_ERROR_NO_DATA;
-       }
-       g_free(uuid);
-
-       /* Copy subject device and related information */
-       con->dev1 = PMCloneOCProvisionDev(dev1);
-       /* To do ACL provisioning only one */
-       con->dev1->next = NULL;
-
-       con->dev2 = PMCloneOCProvisionDev(dev2);
-       /* To do ACL provisioning only one */
-       con->dev2->next = NULL;
+       con->uuid_dev1 = g_strdup(uuid_dev1);
+       con->uuid_dev2 = g_strdup(uuid_dev2);
 
        con->thread = g_thread_try_new("prov_cred", _cred_provisioning_func, con, NULL);
        if (!con->thread) {