diff options
author | Volker Lendecke <vlendec@samba.org> | 2007-02-17 23:41:45 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 14:48:28 -0500 |
commit | 31b3c38c02fd1fb4849518c1d5676cbaf5a9d1f3 (patch) | |
tree | 001f5def1570a9f14def4e040f92ead7c3625c73 /source4/lib/tdb | |
parent | ec587914ed4df87b6aedab129fb59248b137f07b (diff) | |
download | samba-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/tdb')
-rw-r--r-- | source4/lib/tdb/common/tdb.c | 18 |
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; } |