r21412: The last patch also incremented the seqnum when tdb_store failed. Not as bad
authorVolker Lendecke <vlendec@samba.org>
Sat, 17 Feb 2007 23:41:45 +0000 (23:41 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:48:28 +0000 (14:48 -0500)
as not doing it at all, but needs fixing. Also simplify the logic, I had
missed the "goto out" at the end of the function.

Volker

source/lib/tdb/common/tdb.c

index 4a1a3b9c6faab16f6a26c04e27dfe3a5fd9d0ae1..b610cb35b299f79d0eb6ed5a3fa284cab7b5f461 100644 (file)
@@ -257,7 +257,7 @@ int tdb_store(struct tdb_context *tdb, TDB_DATA key, TDB_DATA dbuf, int flag)
        u32 hash;
        tdb_off_t rec_ptr;
        char *p = NULL;
-       int ret = 0;
+       int ret = -1;
 
        if (tdb->read_only || tdb->traverse_read) {
                tdb->ecode = TDB_ERR_RDONLY;
@@ -277,8 +277,10 @@ int tdb_store(struct tdb_context *tdb, TDB_DATA key, TDB_DATA dbuf, int flag)
                }
        } else {
                /* first try in-place update, on modify or replace. */
-               if (tdb_update_hash(tdb, key, hash, dbuf) == 0)
-                       goto out;
+               if (tdb_update_hash(tdb, key, hash, dbuf) == 0) {
+                       ret = 0;
+                       goto fail; /* Well, not really failed */
+               }
                if (tdb->ecode == TDB_ERR_NOEXIST &&
                    flag == TDB_MODIFY) {
                        /* if the record doesn't exist and we are in TDB_MODIFY mode then
@@ -328,15 +330,15 @@ int tdb_store(struct tdb_context *tdb, TDB_DATA key, TDB_DATA dbuf, int flag)
                goto fail;
        }
 
- out:
-       tdb_increment_seqnum(tdb);
+       ret = 0;
+ fail:
+       if (ret == 0) {
+               tdb_increment_seqnum(tdb);
+       }
 
        SAFE_FREE(p); 
        tdb_unlock(tdb, BUCKET(hash), F_WRLCK);
        return ret;
-fail:
-       ret = -1;
-       goto out;
 }