Change codes to let initdb could have deferred lock 69/200469/2
authorJunghyun Yeon <jungh.yeon@samsung.com>
Mon, 25 Feb 2019 11:42:57 +0000 (20:42 +0900)
committerJunghyun Yeon <jungh.yeon@samsung.com>
Thu, 28 Feb 2019 07:14:29 +0000 (16:14 +0900)
- Use deffered lock when initialize db to create table
  more fast when other processes try to get pkg dbinfo.

Change-Id: I1deecc0c4d9e63bcca40277fe560cec2aa948492
Signed-off-by: Junghyun Yeon <jungh.yeon@samsung.com>
parser/src/pkgmgr_parser_db.c

index e065349..8f4c854 100644 (file)
@@ -343,11 +343,23 @@ static const char *cert_init_queries[] = {
        NULL
 };
 
-static int __initialize_db(sqlite3 *db, const char *dbpath, uid_t uid)
+static int __create_tables(sqlite3 *db, const char **queries)
 {
        int ret;
-       const char **queries;
        int i;
+       for (i = 0; queries[i] != NULL; i++) {
+               ret = sqlite3_exec(db, queries[i], NULL, NULL, NULL);
+               if (ret != SQLITE_OK) {
+                       _LOGE("exec failed: %s", sqlite3_errmsg(db));
+                       return -1;
+               }
+       }
+       return 0;
+}
+
+static int __initialize_db(sqlite3 *db, const char *dbpath, uid_t uid)
+{
+       const char **queries;
 
        if (__set_db_version(db))
                return -1;
@@ -361,13 +373,9 @@ static int __initialize_db(sqlite3 *db, const char *dbpath, uid_t uid)
                return -1;
        }
 
-       for (i = 0; queries[i] != NULL; i++) {
-               ret = sqlite3_exec(db, queries[i], NULL, NULL, NULL);
-               if (ret != SQLITE_OK) {
-                       _LOGE("exec failed: %s", sqlite3_errmsg(db));
-                       return -1;
-               }
-       }
+       __BEGIN_TRANSACTION(db);
+       __DO_TRANSACTION(db, __create_tables(db, queries));
+       __END_TRANSACTION(db);
 
        if (__set_db_permission(dbpath, uid))
                _LOGE("failed to set db permission");