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 17:18:03 +0000 (12:18 -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
(This used to be commit 101789946130d51f3092d19f081071bdb5e43c21)

source3/tdb/common/tdb.c

index 9760ceebf5dcc2fc60fc414a720d0751f7d69ba0..248acb7374eda3583e9bbda04953f3358d15cd84 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;
 }