Create an handle when handle is not avaliable 48/210948/2 accepted/tizen/unified/20190729.081037 submit/tizen/20190726.072558
authorWonnam Jang <wn.jang@samsung.com>
Wed, 2 Jan 2019 08:11:28 +0000 (17:11 +0900)
committersooyeon.kim <sooyeon.kim@samsung.com>
Fri, 26 Jul 2019 07:23:05 +0000 (16:23 +0900)
Change-Id: Iacb538c4234e9a3f0b6a79c713af718fbf0b25db
Signed-off-by: Wonnam Jang <wn.jang@samsung.com>
client/vc.c
common/vc_cmd_db.c
common/vc_config_mgr.c [changed mode: 0755->0644]

index b510170..56c7841 100644 (file)
@@ -316,7 +316,7 @@ int vc_initialize(void)
                return VC_ERROR_PERMISSION_DENIED;
        }
 
-       SLOG(LOG_DEBUG, TAG_VCC, "@@@ [Client] Initialize");
+       SLOG(LOG_INFO, TAG_VCC, "@@@ [Client] Initialize");
 
        /* check handle */
        if (true == vc_client_is_valid(g_vc)) {
@@ -408,7 +408,7 @@ int vc_deinitialize(void)
                return VC_ERROR_PERMISSION_DENIED;
        }
 
-       SLOG(LOG_DEBUG, TAG_VCC, "@@@ [Client] Deinitialize");
+       SLOG(LOG_INFO, TAG_VCC, "@@@ [Client] Deinitialize");
 
        if (false == vc_client_is_valid(g_vc)) {
                SLOG(LOG_ERROR, TAG_VCC, "[ERROR] NOT initialized");
@@ -442,7 +442,7 @@ int vc_deinitialize(void)
                break;
        }
 
-       SLOG(LOG_DEBUG, TAG_VCC, "Success: destroy");
+       SLOG(LOG_INFO, TAG_VCC, "Success: destroy");
 
        if (true == g_backup) {
                ret = vc_db_backup_command();
index 29e21c1..c866247 100644 (file)
@@ -58,10 +58,11 @@ const char* vc_db_tag()
 //#define DB_PATH tzplatform_mkpath(TZ_USER_DB, ".vc_info.db")
 static sqlite3* g_db_handle = NULL;
 static sqlite3* g_db_backup_handle = NULL;
-char* g_path = NULL;
-char* g_backup_path = NULL;
+static char* g_path = NULL;
+static char* g_backup_path = NULL;
+static int g_ref_cnt = 0;
+static bool is_db_corrupted = false;
 int g_fpid = -1;
-int g_ref_cnt = 0;
 int g_db_cnt = 0;
 int g_backup_db_cnt = 0;
 
@@ -71,6 +72,16 @@ static int __vc_db_create_table(sqlite3* db_handle, const char* table);
 static int __vc_db_rollback_transaction(sqlite3* db_handle);
 static int __vc_db_commit_transaction(sqlite3* db_handle);
 
+
+int __vc_db_reset_handle(void)
+{
+       if (!g_db_handle || !g_db_backup_handle) {
+               vc_db_finalize();
+               vc_db_initialize();
+       }
+       return 0;
+}
+
 static int __vc_db_transaction(sqlite3* db_handle, const char* transaction)
 {
        sqlite3_stmt* pStmt = NULL;
@@ -1497,6 +1508,15 @@ int __vc_db_open_db(char** path, sqlite3** db_handle)
 static int __vc_db_integrity_check_cb(void *NotUsed, int argc, char **argv, char **azColName)
 {
        SLOG(LOG_INFO, vc_db_tag(), "integrity check cb is called");
+
+       char *check_str = "ok";
+       if (0 != strncmp(argv[0], check_str, strlen(check_str))) {
+               SLOG(LOG_ERROR, vc_db_tag(), "db integrity result : %s", argv[0]);
+               is_db_corrupted = true;
+               return -1;
+       }
+
+       SLOG(LOG_INFO, vc_db_tag(), "db integrity result : %s", argv[0]);
        return 0;
 }
 
@@ -1574,8 +1594,16 @@ int vc_db_initialize(void)
                }
        }
 
-       if (SQLITE_CORRUPT == sqlite3_exec(g_db_handle, "pragma integrity_check", __vc_db_integrity_check_cb, NULL, NULL)) {
+       int ret = sqlite3_exec(g_db_handle, "pragma integrity_check", __vc_db_integrity_check_cb, NULL, NULL);
+       if (true == is_db_corrupted || SQLITE_CORRUPT == ret) {
                SLOG(LOG_ERROR, vc_db_tag(), "[ERROR] Fail to open DB");
+               if (g_db_handle) {
+                       ret = db_util_close(g_db_handle);
+                       if (ret != SQLITE_OK) {
+                               SLOG(LOG_ERROR, vc_db_tag(), "[ERROR] Fail to close db, ret %d: %s", ret, sqlite3_errmsg(g_db_handle));
+                       }
+                       g_db_handle = NULL;
+               }
                if (0 != remove(g_path)) {
                        SLOG(LOG_ERROR, vc_db_tag(), "[Error] remove file(%s) is failed", g_path);
                        g_db_cnt = (g_db_cnt + 1) % 1000;
@@ -1595,6 +1623,10 @@ int vc_db_initialize(void)
                        SLOG(LOG_ERROR, vc_db_tag(), "[ERROR] Fail to connect main DB");
                        return VC_DB_ERROR_OPERATION_FAILED;
                }
+
+               g_ref_cnt++;
+               SLOG(LOG_INFO, vc_db_tag(), "[SUCCESS] DB initialization after restore");
+               return 0;
        }
 
        is_connect = __vc_db_connect_db(&g_backup_path, &g_db_backup_handle);
@@ -1615,6 +1647,8 @@ int vc_db_initialize(void)
        }
 
        g_ref_cnt++;
+
+       SLOG(LOG_INFO, vc_db_tag(), "[SUCCESS] DB initialization");
        return VC_DB_ERROR_NONE;
 }
 
@@ -1649,6 +1683,7 @@ int vc_db_finalize(void)
 
 int vc_db_create_table()
 {
+       __vc_db_reset_handle();
        __vc_db_begin_transaction(g_db_handle);
 
        int ret = __vc_db_create_table(g_db_handle, VC_INFO_TABLE);
@@ -1723,6 +1758,7 @@ int __vc_db_delete_table(sqlite3* db_handle, const char* table)
 
 int vc_db_delete_table(const char* table)
 {
+       __vc_db_reset_handle();
        __vc_db_begin_transaction(g_db_handle);
 
        int ret = __vc_db_delete_table(g_db_handle, table);
@@ -1739,18 +1775,21 @@ int vc_db_delete_table(const char* table)
 
 int vc_db_begin_transaction(void)
 {
+       __vc_db_reset_handle();
        int ret = __vc_db_begin_transaction(g_db_handle);
        return ret;
 }
 
 int vc_db_rollback_transaction(void)
 {
+       __vc_db_reset_handle();
        int ret = __vc_db_rollback_transaction(g_db_handle);
        return ret;
 }
 
 int vc_db_commit_transaction(void)
 {
+       __vc_db_reset_handle();
        int ret = __vc_db_commit_transaction(g_db_handle);
        return ret;
 }
@@ -2004,7 +2043,6 @@ int vc_db_insert_command(int pid, vc_cmd_type_e type, vc_cmd_s* cmd, bool skip_i
        return ret;
 }
 
-
 static int __vc_db_insert_commands_list(sqlite3* db_handle, int pid, vc_cmd_type_e type, GSList* cmd_list, char* invocation_name, bool skip_invocation)
 {
        GSList *iter = NULL;
@@ -2047,6 +2085,7 @@ static int __vc_db_insert_commands_list(sqlite3* db_handle, int pid, vc_cmd_type
 
 int vc_db_insert_commands_list(int pid, vc_cmd_type_e type, GSList* cmd_list, char* invocation_name, bool skip_invocation)
 {
+       __vc_db_reset_handle();
        __vc_db_begin_transaction(g_db_handle);
 
        int ret = __vc_db_insert_commands_list(g_db_handle, pid, type, cmd_list, invocation_name, false);
@@ -2062,6 +2101,7 @@ int vc_db_insert_commands_list(int pid, vc_cmd_type_e type, GSList* cmd_list, ch
 
 int vc_db_get_commands(int pid, vc_cmd_type_e type, GSList** cmd_list)
 {
+       __vc_db_reset_handle();
        __vc_db_begin_transaction(g_db_handle);
 
        int ret = __vc_db_get_commands(g_db_handle, pid, type, cmd_list);
@@ -2086,6 +2126,7 @@ int vc_db_insert_result(const char* result_text, int event, const char* msg, vc_
                LOG(LOG_ERROR, vc_db_tag(), "[ERROR] Fail to delete table");
 
        if (NULL == vc_cmd_list) {
+               __vc_db_reset_handle();
                __vc_db_begin_transaction(g_db_handle);
                int ret = __vc_db_insert_result(g_db_handle, result_text, event, msg, exclusive, NULL);
                if (ret != VC_DB_ERROR_NONE) {
@@ -2114,6 +2155,7 @@ int vc_db_insert_result(const char* result_text, int event, const char* msg, vc_
                vc_cmd_s* temp_cmd = NULL;
                temp_cmd = (vc_cmd_s*)vc_command;
 
+               __vc_db_reset_handle();
                __vc_db_begin_transaction(g_db_handle);
                ret = __vc_db_insert_result(g_db_handle, result_text, event, msg, exclusive, temp_cmd);
                if (ret != VC_DB_ERROR_NONE) {
@@ -2130,6 +2172,7 @@ int vc_db_insert_result(const char* result_text, int event, const char* msg, vc_
 
 int vc_db_get_result(char** result_text, int* event, char** msg, int pid, vc_cmd_list_h vc_cmd_list, bool exclusive)
 {
+       __vc_db_reset_handle();
        __vc_db_begin_transaction(g_db_handle);
 
        int ret = __vc_db_get_result(g_db_handle, result_text, event, msg, pid, NULL, vc_cmd_list, exclusive);
@@ -2168,6 +2211,7 @@ int vc_db_get_result(char** result_text, int* event, char** msg, int pid, vc_cmd
 
 int vc_db_get_appid_list(const char* result, GSList** app_list)
 {
+       __vc_db_reset_handle();
        __vc_db_begin_transaction(g_db_handle);
 
        int ret = __vc_db_get_appid(g_db_handle, result, app_list);
@@ -2182,6 +2226,7 @@ int vc_db_get_appid_list(const char* result, GSList** app_list)
 
 int vc_db_get_result_pid_list(const char* result, GSList** pid_list)
 {
+       __vc_db_reset_handle();
        __vc_db_begin_transaction(g_db_handle);
 
        int ret = __vc_db_get_result_pid_list(g_db_handle, result, pid_list);
@@ -2196,6 +2241,7 @@ int vc_db_get_result_pid_list(const char* result, GSList** pid_list)
 
 int vc_db_append_commands(int pid, int type, vc_cmd_list_h vc_cmd_list)
 {
+       __vc_db_reset_handle();
        __vc_db_begin_transaction(g_db_handle);
 
        int ret = __vc_db_append_commands(g_db_handle, pid, type, vc_cmd_list);
@@ -2210,6 +2256,7 @@ int vc_db_append_commands(int pid, int type, vc_cmd_list_h vc_cmd_list)
 
 int vc_db_delete_commands(int pid, vc_cmd_type_e type, char* appid)
 {
+       __vc_db_reset_handle();
        __vc_db_begin_transaction(g_db_handle);
 
        int ret = 0;
@@ -2227,6 +2274,7 @@ int vc_db_backup_command()
 {
        GSList* list = NULL;
 
+       __vc_db_reset_handle();
        __vc_db_begin_transaction(g_db_backup_handle);
 
        int ret = __vc_db_delete_table(g_db_backup_handle, VC_INFO_TABLE);
@@ -2262,6 +2310,7 @@ int vc_db_restore_command()
 {
        GSList* list = NULL;
 
+       __vc_db_reset_handle();
        __vc_db_begin_transaction(g_db_backup_handle);
 
        int ret = __vc_db_get_commands(g_db_backup_handle, -1, VC_COMMAND_TYPE_BACKGROUND, &list);
old mode 100755 (executable)
new mode 100644 (file)