Fix consumer vanish bug 83/87883/1 accepted/tizen/common/20160912.181254 accepted/tizen/ivi/20160912.215440 accepted/tizen/mobile/20160912.215348 accepted/tizen/tv/20160912.215404 accepted/tizen/wearable/20160912.215421 submit/tizen/20160912.051209
authorHyunho Kang <hhstark.kang@samsung.com>
Mon, 12 Sep 2016 04:25:00 +0000 (13:25 +0900)
committerHyunho Kang <hhstark.kang@samsung.com>
Mon, 12 Sep 2016 04:26:16 +0000 (13:26 +0900)
- object path can not identify consumer process

Change-Id: I1fde6b95718664c893c3b62862fdc7f47d4ff9ff
Signed-off-by: Hyunho Kang <hhstark.kang@samsung.com>
src/data-control-provider.c

index 05b4b23c8e0a705e49cd2cd8b5f67f00d7e4cf82..925a3673ac964f7bb4d53bc49f740dcf05c0bb0a 100755 (executable)
@@ -95,7 +95,7 @@ static datacontrol_provider_map_cb *provider_map_cb = NULL;
 static GList *__noti_consumer_app_list = NULL;
 static GList *__noti_consumer_filter_info_list = NULL;
 static int __create_consumer_list_db();
-static int __delete_consumer_list_db_info(char *object_path);
+static int __delete_consumer_list_db_info(char *unique_id);
 
 static int __data_changed_filter_cb_info_compare_cb(gconstpointer a, gconstpointer b)
 {
@@ -129,7 +129,7 @@ static void __free_consumer_info(const gchar *name)
        }
 
        info = (datacontrol_consumer_info *)find_list->data;
-       result = __delete_consumer_list_db_info(info->object_path);
+       result = __delete_consumer_list_db_info(info->unique_id);
        if (result != DATACONTROL_ERROR_NONE)
                LOGE("__delete_consumer_list_db_info fail %d", result);
 
@@ -902,15 +902,15 @@ out:
        return result;
 }
 
-static int __delete_consumer_list_db_info(char *object_path)
+static int __delete_consumer_list_db_info(char *unique_id)
 {
        int r;
        char query[QUERY_MAXLEN];
        int result = DATACONTROL_ERROR_NONE;
        sqlite3_stmt *stmt = NULL;
        sqlite3_snprintf(QUERY_MAXLEN, query,
-                       "DELETE FROM data_control_consumer_path_list WHERE object_path = ?");
-       LOGI("consumer list db DELETE : %s, object_path : %s", query, object_path);
+                       "DELETE FROM data_control_consumer_path_list WHERE unique_id = ?");
+       LOGI("consumer list db DELETE : %s, unique_id : %s", query, unique_id);
        r = sqlite3_prepare(__provider_db, query, sizeof(query), &stmt, NULL);
        if (r != SQLITE_OK) {
                LOGE("sqlite3_prepare error(%d , %d, %s)", r,
@@ -919,7 +919,7 @@ static int __delete_consumer_list_db_info(char *object_path)
                goto out;
        }
 
-       r = sqlite3_bind_text(stmt, 1, object_path, strlen(object_path), SQLITE_STATIC);
+       r = sqlite3_bind_text(stmt, 1, unique_id, strlen(unique_id), SQLITE_STATIC);
        if (r != SQLITE_OK) {
                LOGE("caller bind error(%d) \n", r);
                result = DATACONTROL_ERROR_IO_ERROR;
@@ -2110,6 +2110,7 @@ int datacontrol_provider_foreach_data_change_consumer(
                void *user_data)
 {
        char *app_id = NULL;
+       char *unique_id = NULL;
        int ret = DATACONTROL_ERROR_NONE;
        sqlite3_stmt *stmt = NULL;
        char query[QUERY_MAXLEN];
@@ -2118,7 +2119,7 @@ int datacontrol_provider_foreach_data_change_consumer(
        consumer_list_cb = (data_control_provider_data_change_consumer_cb)list_cb;
 
        sqlite3_snprintf(QUERY_MAXLEN, query,
-                       "SELECT app_id " \
+                       "SELECT app_id, unique_id " \
                        "FROM data_control_consumer_path_list WHERE provider_id = ? AND data_id = ?");
        LOGI("get_changed_noti_consumer_list query : %s", query);
 
@@ -2144,13 +2145,15 @@ int datacontrol_provider_foreach_data_change_consumer(
        }
 
        while (SQLITE_ROW == sqlite3_step(stmt)) {
+
                app_id = (char *)sqlite3_column_text(stmt, 0);
                if (!app_id) {
                        LOGE("Failed to get package name\n");
                        continue;
                }
+               unique_id = (char *)sqlite3_column_text(stmt, 1);
                callback_result = consumer_list_cb((data_control_h)provider, app_id, user_data);
-               LOGI("app_id : %s, result : %d ", app_id, callback_result);
+               LOGI("app_id : %s, unique_id : %s, result : %d ", app_id, unique_id, callback_result);
                if (!callback_result)
                        break;
        }