diff options
author | Jelmer Vernooij <jelmer@samba.org> | 2008-12-16 15:36:53 +0100 |
---|---|---|
committer | Jelmer Vernooij <jelmer@samba.org> | 2008-12-16 15:36:53 +0100 |
commit | a7109b183b555ee795c3e32c63e2647025705fc1 (patch) | |
tree | bc118e6f1dd72466367a4aa9b31df08f253eaa07 /lib/tdb/tools/tdbbackup.c | |
parent | 0f04beff337a936a66c86272ff79defd9e8ae173 (diff) | |
parent | 9e64ed018e5aa84d802b01953b481fbb07eb00aa (diff) | |
download | samba-a7109b183b555ee795c3e32c63e2647025705fc1.tar.gz samba-a7109b183b555ee795c3e32c63e2647025705fc1.tar.bz2 samba-a7109b183b555ee795c3e32c63e2647025705fc1.zip |
Merge branch 'master' of ssh://git.samba.org/data/git/samba
Diffstat (limited to 'lib/tdb/tools/tdbbackup.c')
-rw-r--r-- | lib/tdb/tools/tdbbackup.c | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/lib/tdb/tools/tdbbackup.c b/lib/tdb/tools/tdbbackup.c index 6f3ca48314..83c0e16399 100644 --- a/lib/tdb/tools/tdbbackup.c +++ b/lib/tdb/tools/tdbbackup.c @@ -126,9 +126,17 @@ static int backup_tdb(const char *old_name, const char *new_name, int hash_size) return 1; } - /* lock the old tdb */ - if (tdb_lockall(tdb) != 0) { - fprintf(stderr,"Failed to lock %s\n", old_name); + if (tdb_transaction_start(tdb) != 0) { + printf("Failed to start transaction on old tdb\n"); + tdb_close(tdb); + tdb_close(tdb_new); + unlink(tmp_name); + free(tmp_name); + return 1; + } + + if (tdb_transaction_start(tdb_new) != 0) { + printf("Failed to start transaction on new tdb\n"); tdb_close(tdb); tdb_close(tdb_new); unlink(tmp_name); @@ -152,6 +160,14 @@ static int backup_tdb(const char *old_name, const char *new_name, int hash_size) /* close the old tdb */ tdb_close(tdb); + if (tdb_transaction_commit(tdb_new) != 0) { + fprintf(stderr, "Failed to commit new tdb\n"); + tdb_close(tdb_new); + unlink(tmp_name); + free(tmp_name); + return 1; + } + /* close the new tdb and re-open read-only */ tdb_close(tdb_new); tdb_new = tdb_open(tmp_name, 0, TDB_DEFAULT, O_RDONLY, 0); @@ -173,9 +189,6 @@ static int backup_tdb(const char *old_name, const char *new_name, int hash_size) return 1; } - /* make sure the new tdb has reached stable storage */ - fsync(tdb_fd(tdb_new)); - /* close the new tdb and rename it to .bak */ tdb_close(tdb_new); if (rename(tmp_name, new_name) != 0) { |