summaryrefslogtreecommitdiff
path: root/lib/tdb/tools/tdbbackup.c
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2008-12-16 15:36:53 +0100
committerJelmer Vernooij <jelmer@samba.org>2008-12-16 15:36:53 +0100
commita7109b183b555ee795c3e32c63e2647025705fc1 (patch)
treebc118e6f1dd72466367a4aa9b31df08f253eaa07 /lib/tdb/tools/tdbbackup.c
parent0f04beff337a936a66c86272ff79defd9e8ae173 (diff)
parent9e64ed018e5aa84d802b01953b481fbb07eb00aa (diff)
downloadsamba-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.c25
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) {