Переглянути джерело

Merge pull request #323 from layerhq/enhancement/jitter-in-busy-handler

Add jitter to SQLite Busy handler
August "Gus" Mueller 11 роки тому
батько
коміт
3d0bbdd679
1 змінених файлів з 5 додано та 1 видалено
  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;
     }