tdb2: fix bogus error from tdb_unlockall() after fork in tdb1 backend.
authorRusty Russell <rusty@rustcorp.com.au>
Wed, 31 Aug 2011 06:01:08 +0000 (15:31 +0930)
committerRusty Russell <rusty@rustcorp.com.au>
Wed, 31 Aug 2011 06:01:08 +0000 (15:31 +0930)
We're always allowed to unlock after a fork; by setting the count to 0
before calling the generic unlock function we don't trigger the pid
check.

ccan/tdb2/tdb1_lock.c

index e59874fb2f01db911ac3b698f541e816ec0be7ef..5cc0ad656729c51877aebf5f1fe7489bb11b972a 100644 (file)
@@ -384,15 +384,15 @@ int tdb1_allrecord_unlock(struct tdb_context *tdb, int ltype)
                return 0;
        }
 
+       tdb->file->allrecord_lock.count = 0;
+       tdb->file->allrecord_lock.ltype = 0;
+
        if (tdb1_brunlock(tdb, ltype, TDB1_FREELIST_TOP, 0)) {
                tdb_logerr(tdb, tdb->last_error, TDB_LOG_ERROR,
                           "tdb1_unlockall failed (%s)", strerror(errno));
                return -1;
        }
 
-       tdb->file->allrecord_lock.count = 0;
-       tdb->file->allrecord_lock.ltype = 0;
-
        return 0;
 }