summaryrefslogtreecommitdiff
path: root/source4/lib
diff options
context:
space:
mode:
authorVolker Lendecke <vlendec@samba.org>2007-02-17 23:41:45 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:48:28 -0500
commit31b3c38c02fd1fb4849518c1d5676cbaf5a9d1f3 (patch)
tree001f5def1570a9f14def4e040f92ead7c3625c73 /source4/lib
parentec587914ed4df87b6aedab129fb59248b137f07b (diff)
downloadsamba-31b3c38c02fd1fb4849518c1d5676cbaf5a9d1f3.tar.gz
samba-31b3c38c02fd1fb4849518c1d5676cbaf5a9d1f3.tar.bz2
samba-31b3c38c02fd1fb4849518c1d5676cbaf5a9d1f3.zip
r21412: The last patch also incremented the seqnum when tdb_store failed. Not as bad
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 ed30a0ff602d0a1d4409bee4faf12b6979b5f4b8)
Diffstat (limited to 'source4/lib')
-rw-r--r--source4/lib/tdb/common/tdb.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/source4/lib/tdb/common/tdb.c b/source4/lib/tdb/common/tdb.c
index 4a1a3b9c6f..b610cb35b2 100644
--- a/source4/lib/tdb/common/tdb.c
+++ b/source4/lib/tdb/common/tdb.c
@@ -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;
}