]> www.infradead.org Git - users/mchehab/rasdaemon.git/commitdiff
ras-record: retry open if busy
authorMauro Carvalho Chehab <mchehab@redhat.com>
Fri, 10 May 2013 14:28:59 +0000 (11:28 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Fri, 10 May 2013 14:28:59 +0000 (11:28 -0300)
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 <mchehab@redhat.com>
ras-record.c

index eebfc8d5db14331cff02199114e255f48b65fa9c..624775dc37bdcee24297f8ec3d5b2a42d6dcb6d4 100644 (file)
@@ -23,6 +23,7 @@
 #include <string.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <unistd.h>
 #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);