From a53e840ec5c03600d2a2a3c79e89339cb15808ca Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Fri, 10 May 2013 11:28:59 -0300 Subject: [PATCH] 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 --- ras-record.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) 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); -- 2.50.1