From: Mauro Carvalho Chehab Date: Fri, 10 May 2013 14:28:59 +0000 (-0300) Subject: ras-record: retry open if busy X-Git-Tag: v0.3.0~35 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=a53e840ec5c03600d2a2a3c79e89339cb15808ca;p=users%2Fmchehab%2Frasdaemon.git ras-record: retry open if busy As we'll have several concurrent opens at the same time, we need to retry if race conditions happen. Signed-off-by: Mauro Carvalho Chehab --- diff --git a/ras-record.c b/ras-record.c index eebfc8d..624775d 100644 --- a/ras-record.c +++ b/ras-record.c @@ -23,6 +23,7 @@ #include #include #include +#include #include "ras-events.h" #include "ras-mc-handler.h" #include "ras-logger.h" @@ -118,9 +119,16 @@ int ras_mc_event_opendb(struct ras_events *ras) return -1; } - rc = sqlite3_open_v2(SQLITE_RAS_DB, &db, - SQLITE_OPEN_FULLMUTEX | SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL); - if (rc != SQLITE_OK) { + do { + rc = sqlite3_open_v2(SQLITE_RAS_DB, &db, + SQLITE_OPEN_FULLMUTEX | + SQLITE_OPEN_READWRITE | + SQLITE_OPEN_CREATE, NULL); + if (rc == SQLITE_BUSY) + usleep(10000); + } while (rc == SQLITE_BUSY); + + if (rc != SQLITE_OK) { log(TERM, LOG_ERR, "Failed to connect to %s: error = %d\n", SQLITE_RAS_DB, rc); free(priv);