tdb: Handle TDB_NEXT_LOCK_ERR in tdb_traverse_internal
authorVolker Lendecke <vl@samba.org>
Sun, 4 Mar 2018 09:21:09 +0000 (10:21 +0100)
committerJeremy Allison <jra@samba.org>
Thu, 22 Mar 2018 01:15:14 +0000 (02:15 +0100)
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
lib/tdb/common/traverse.c

index 9b833795959c85ba06723bda7eb0a5ba6a5c1879..7a1d567cc010e8fa441f2602b9574fd26114f264 100644 (file)
@@ -166,9 +166,16 @@ static int tdb_traverse_internal(struct tdb_context *tdb,
 
        /* tdb_next_lock places locks on the record returned, and its chain */
        while ((off = tdb_next_lock(tdb, tl, &rec)) != 0) {
-               tdb_len_t full_len = rec.key_len + rec.data_len;
+               tdb_len_t full_len;
                int nread;
 
+               if (off == TDB_NEXT_LOCK_ERR) {
+                       ret = -1;
+                       goto out;
+               }
+
+               full_len = rec.key_len + rec.data_len;
+
                if (full_len > recbuf_len) {
                        recbuf_len = full_len;
 
@@ -195,10 +202,6 @@ static int tdb_traverse_internal(struct tdb_context *tdb,
                        }
                }
 
-               if (off == TDB_NEXT_LOCK_ERR) {
-                       ret = -1;
-                       goto out;
-               }
                count++;
                /* now read the full record */
                nread = tdb->methods->tdb_read(tdb, tl->off + sizeof(rec),