--- common/lock.c.old 2013-06-04 15:21:30.000000000 +0100 +++ common/lock.c 2013-11-26 20:16:29.699551878 +0000 @@ -671,11 +671,18 @@ return 0; } - if (!mark_lock && tdb_brunlock(tdb, ltype, FREELIST_TOP, 0)) { - TDB_LOG((tdb, TDB_DEBUG_ERROR, "tdb_unlockall failed (%s)\n", strerror(errno))); - return -1; + if (!mark_lock) { + if (tdb_brunlock(tdb, ltype, FREELIST_TOP, tdb->hash_size * 4)) { + TDB_LOG((tdb, TDB_DEBUG_ERROR, "tdb_unlockall failed (%s)\n", strerror(errno))); + return -1; + } + if (tdb_brunlock(tdb, ltype, lock_offset(tdb->hash_size), 0)) { + TDB_LOG((tdb, TDB_DEBUG_ERROR, "tdb_unlockall failed (%s)\n", strerror(errno))); + return -1; + } } + tdb->allrecord_lock.count = 0; tdb->allrecord_lock.ltype = 0;