Kaynağa Gözat

Add jitter to SQLite Busy handler

Blake Watters 11 yıl önce
ebeveyn
işleme
0a3a23322f
1 değiştirilmiş dosya ile 5 ekleme ve 1 silme
  1. 5 1
      src/fmdb/FMDatabase.m

+ 5 - 1
src/fmdb/FMDatabase.m

@@ -231,7 +231,11 @@ static int FMDBDatabaseBusyHandler(void *f, int count) {
     NSTimeInterval delta = [NSDate timeIntervalSinceReferenceDate] - (self->_startBusyRetryTime);
     
     if (delta < [self maxBusyRetryTimeInterval]) {
-        sqlite3_sleep(50); // milliseconds
+        int requestedSleepInMillseconds = arc4random_uniform(50) + 50;
+        int actualSleepInMilliseconds = sqlite3_sleep(requestedSleepInMillseconds);
+        if (actualSleepInMilliseconds != requestedSleepInMillseconds) {
+            NSLog(@"WARNING: Requested sleep of %i milliseconds, but SQLite returned %i. Maybe SQLite wasn't built with HAVE_USLEEP=1?", requestedSleepInMillseconds, actualSleepInMilliseconds);
+        }
         return 1;
     }