#include "widget_plugin_parser_internal.h"
+#define BUSY_WAITING_USEC 50000 /* 0.05 sec */
+#define BUSY_WAITING_MAX 20 /* wait for max 1 sec */
+
void _free_support_size(gpointer data)
{
struct support_size *size = (struct support_size *)data;
return path;
}
+static int __db_busy_handler(void *data, int count)
+{
+ if (count < BUSY_WAITING_MAX) {
+ usleep(BUSY_WAITING_USEC);
+ return 1;
+ }
+
+ /* sqlite3_prepare_v2 will return SQLITE_BUSY */
+ return 0;
+}
+
sqlite3 *_open_db(uid_t uid, bool readonly)
{
int ret;
return NULL;
}
+ ret = sqlite3_busy_handler(db, __db_busy_handler, NULL);
+ if (ret != SQLITE_OK) {
+ LOGE("Failed to register busy handler: %s",
+ sqlite3_errmsg(db));
+ sqlite3_close_v2(db);
+ return NULL;
+ }
+
/* turn on foreign keys */
if (sqlite3_exec(db, "PRAGMA foreign_keys = ON", NULL, NULL, NULL)) {
sqlite3_close_v2(db);