Release version 0.5.9
[platform/core/appfw/librua.git] / src / rua_util.c
index 09dd080..ee83521 100644 (file)
@@ -23,7 +23,7 @@
 #include <pwd.h>
 
 #include <sys/stat.h>
-#include <db-util.h>
+#include <sqlite3.h>
 #include <tzplatform_config.h>
 #include <dlog.h>
 
@@ -50,6 +50,19 @@ char *_rua_util_get_db_path(uid_t uid, char *db_name)
        return strdup(db_path);
 }
 
+#define BUSY_WAITING_USEC (1000000 / 10 / 2) /* 0.05 sec */
+#define BUSY_WAITING_MAX 20 /* wait for max 1 sec */
+static int __db_busy_handler(void *data, int count)
+{
+       /* sqlite3_prepare_V2 will return SQLITE_BUSY */
+       if (count >= BUSY_WAITING_MAX)
+               return 0;
+
+       usleep(BUSY_WAITING_USEC);
+
+       return 1;
+}
+
 int _rua_util_open_db(sqlite3 **db, int flags, uid_t uid, char *db_name)
 {
        int r;
@@ -61,19 +74,20 @@ int _rua_util_open_db(sqlite3 **db, int flags, uid_t uid, char *db_name)
                return -1;
        }
 
-       r = db_util_open_with_options(db_path, db, flags, NULL);
-       if (r) {
-               LOGE("db util open error(%d/%d/%d/%s)", r,
-                       sqlite3_errcode(*db),
-                       sqlite3_extended_errcode(*db),
-                       sqlite3_errmsg(*db));
-               free(db_path);
+       r = sqlite3_open_v2(db_path, db, flags, NULL);
+       free(db_path);
+       if (r != SQLITE_OK) {
+               LOGE("open db failed: %d", r);
                return -1;
        }
 
-       free(db_path);
+       r = sqlite3_busy_handler(*db, __db_busy_handler, NULL);
+       if (r != SQLITE_OK) {
+               LOGE("register busy handler failed: %s", sqlite3_errmsg(*db));
+               return -1;
+       }
 
-       return r;
+       return 0;
 }
 
 int _rua_util_check_uid(uid_t target_uid)