summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorVolker Lendecke <vlendec@samba.org>2005-08-29 13:45:13 +0000
committerVolker Lendecke <vlendec@samba.org>2005-08-29 13:45:13 +0000
commitcf340c6387fb05dc9d45046cae6675120dfe85e2 (patch)
treedfc2043630ce9ef8c3cbe9f6cf5ed5715f29f78b /source
parenta178bf503b72af81adce599ae6c31c6893438473 (diff)
downloadsamba-cf340c6387fb05dc9d45046cae6675120dfe85e2.tar.gz
samba-cf340c6387fb05dc9d45046cae6675120dfe85e2.tar.xz
samba-cf340c6387fb05dc9d45046cae6675120dfe85e2.zip
r9738: Adapt tdb_torture to the new CLEAR_IF_FIRST semantics. We need one parent
process holding the active if two cluster nodes access the same tdb. Volker
Diffstat (limited to 'source')
-rw-r--r--source/tdb/tdbtorture.c66
1 files changed, 33 insertions, 33 deletions
diff --git a/source/tdb/tdbtorture.c b/source/tdb/tdbtorture.c
index 3f704e537ea..d03cc2a6103 100644
--- a/source/tdb/tdbtorture.c
+++ b/source/tdb/tdbtorture.c
@@ -183,45 +183,45 @@ int main(int argc, char *argv[])
int loops = NLOOPS;
pid_t pids[NPROC];
- pids[0] = getpid();
-
- for (i=0;i<NPROC-1;i++) {
- if ((pids[i+1]=fork()) == 0) break;
- }
-
- db = tdb_open("torture.tdb", 2, TDB_CLEAR_IF_FIRST,
+ db = tdb_open("torture.tdb", 0, TDB_CLEAR_IF_FIRST,
O_RDWR | O_CREAT, 0600);
if (!db) {
fatal("db open failed");
}
- tdb_logging_function(db, tdb_log);
-
- srand(seed + getpid());
- srandom(seed + getpid() + time(NULL));
- for (i=0;i<loops;i++) addrec_db();
-
- tdb_traverse(db, NULL, NULL);
- tdb_traverse(db, traverse_fn, NULL);
- tdb_traverse(db, traverse_fn, NULL);
-
- tdb_close(db);
-
- if (getpid() == pids[0]) {
- for (i=0;i<NPROC-1;i++) {
- int status;
- if (waitpid(pids[i+1], &status, 0) != pids[i+1]) {
- printf("failed to wait for %d\n",
- (int)pids[i+1]);
- exit(1);
- }
- if (WEXITSTATUS(status) != 0) {
- printf("child %d exited with status %d\n",
- (int)pids[i+1], WEXITSTATUS(status));
- exit(1);
- }
+
+ for (i=0;i<NPROC;i++) {
+ pids[i] = fork();
+ if (pids[i] == 0) {
+ tdb_reopen_all();
+
+ tdb_logging_function(db, tdb_log);
+
+ srand(seed + getpid());
+ srandom(seed + getpid() + time(NULL));
+ for (i=0;i<loops;i++) addrec_db();
+
+ tdb_traverse(db, NULL, NULL);
+ tdb_traverse(db, traverse_fn, NULL);
+ tdb_traverse(db, traverse_fn, NULL);
+
+ tdb_close(db);
+ exit(0);
}
- printf("OK\n");
}
+ for (i=0;i<NPROC;i++) {
+ int status;
+ if (waitpid(pids[i], &status, 0) != pids[i]) {
+ printf("failed to wait for %d\n",
+ (int)pids[i]);
+ exit(1);
+ }
+ if (WEXITSTATUS(status) != 0) {
+ printf("child %d exited with status %d\n",
+ (int)pids[i], WEXITSTATUS(status));
+ exit(1);
+ }
+ }
+ printf("OK\n");
return 0;
}