X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Frua_util.c;h=ee83521411d990e2ef7b4b889a38e9659045ae11;hb=refs%2Fheads%2Ftizen_6.0;hp=09dd080ab027859f65afc120070e3feaaba74350;hpb=aebbb1ed7e0a832e90e20cb9053d2aedce75d422;p=platform%2Fcore%2Fappfw%2Flibrua.git diff --git a/src/rua_util.c b/src/rua_util.c index 09dd080..ee83521 100644 --- a/src/rua_util.c +++ b/src/rua_util.c @@ -23,7 +23,7 @@ #include #include -#include +#include #include #include @@ -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)