tdb: Don't delete dead records in traverse
authorVolker Lendecke <vl@samba.org>
Tue, 23 Oct 2018 11:40:34 +0000 (13:40 +0200)
committerJeremy Allison <jra@samba.org>
Mon, 29 Oct 2018 22:36:24 +0000 (23:36 +0100)
The next commit will change the handling of dead records, removing the
"tdb_do_delete" function. As traverses should not happen in normal
operations, dead records from them should be rare, and relying on
traverses to remove them is a very bad idea IMHO.

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
lib/tdb/common/traverse.c

index 7a1d567cc010e8fa441f2602b9574fd26114f264..a9af1d4b8249a3980b649fc2a80c0508f95ed4c7 100644 (file)
@@ -96,7 +96,6 @@ static tdb_off_t tdb_next_lock(struct tdb_context *tdb, struct tdb_traverse_lock
 
                /* Iterate through chain */
                while( tlock->off) {
-                       tdb_off_t current;
                        if (tdb_rec_read(tdb, tlock->off, rec) == -1)
                                goto fail;
 
@@ -114,12 +113,7 @@ static tdb_off_t tdb_next_lock(struct tdb_context *tdb, struct tdb_traverse_lock
                                return tlock->off;
                        }
 
-                       /* Try to clean dead ones from old traverses */
-                       current = tlock->off;
                        tlock->off = rec->next;
-                       if (!(tdb->read_only || tdb->traverse_read) &&
-                           tdb_do_delete(tdb, current, rec) != 0)
-                               goto fail;
                }
                tdb_unlock(tdb, tlock->list, tlock->lock_rw);
                want_next = 0;