svn commit: samba r10468 - in branches/SAMBA_4_0/source/lib/tdb:
common tools
tridge at samba.org
tridge at samba.org
Sat Sep 24 06:49:29 GMT 2005
Author: tridge
Date: 2005-09-24 06:49:28 +0000 (Sat, 24 Sep 2005)
New Revision: 10468
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=10468
Log:
- terminate tdbtorture quickly when an error is detected
- more workarounds for aix not handling malloc of size 0
Modified:
branches/SAMBA_4_0/source/lib/tdb/common/io.c
branches/SAMBA_4_0/source/lib/tdb/common/transaction.c
branches/SAMBA_4_0/source/lib/tdb/tools/tdbtorture.c
Changeset:
Modified: branches/SAMBA_4_0/source/lib/tdb/common/io.c
===================================================================
--- branches/SAMBA_4_0/source/lib/tdb/common/io.c 2005-09-24 05:02:02 UTC (rev 10467)
+++ branches/SAMBA_4_0/source/lib/tdb/common/io.c 2005-09-24 06:49:28 UTC (rev 10468)
@@ -97,6 +97,10 @@
static int tdb_write(struct tdb_context *tdb, tdb_off_t off,
const void *buf, tdb_len_t len)
{
+ if (len == 0) {
+ return 0;
+ }
+
if (tdb->read_only || tdb->traverse_read) {
tdb->ecode = TDB_ERR_RDONLY;
return -1;
Modified: branches/SAMBA_4_0/source/lib/tdb/common/transaction.c
===================================================================
--- branches/SAMBA_4_0/source/lib/tdb/common/transaction.c 2005-09-24 05:02:02 UTC (rev 10467)
+++ branches/SAMBA_4_0/source/lib/tdb/common/transaction.c 2005-09-24 06:49:28 UTC (rev 10468)
@@ -196,6 +196,10 @@
const void *buf, tdb_len_t len)
{
struct tdb_transaction_el *el;
+
+ if (len == 0) {
+ return 0;
+ }
/* if the write is to a hash head, then update the transaction
hash heads */
Modified: branches/SAMBA_4_0/source/lib/tdb/tools/tdbtorture.c
===================================================================
--- branches/SAMBA_4_0/source/lib/tdb/tools/tdbtorture.c 2005-09-24 05:02:02 UTC (rev 10467)
+++ branches/SAMBA_4_0/source/lib/tdb/tools/tdbtorture.c 2005-09-24 06:49:28 UTC (rev 10468)
@@ -50,7 +50,7 @@
static struct tdb_context *db;
static int in_transaction;
-static int log_count;
+static int error_count;
#ifdef PRINTF_ATTRIBUTE
static void tdb_log(struct tdb_context *tdb, int level, const char *format, ...) PRINTF_ATTRIBUTE(3,4);
@@ -59,7 +59,7 @@
{
va_list ap;
- log_count++;
+ error_count++;
va_start(ap, format);
vfprintf(stdout, format, ap);
@@ -78,7 +78,7 @@
static void fatal(const char *why)
{
perror(why);
- exit(1);
+ error_count++;
}
static char *randbuf(int len)
@@ -283,37 +283,55 @@
srand(seed + i);
srandom(seed + i);
- for (i=0;i<num_loops;i++) {
+ for (i=0;i<num_loops && error_count == 0;i++) {
addrec_db();
}
- tdb_traverse_read(db, NULL, NULL);
- tdb_traverse(db, traverse_fn, NULL);
- tdb_traverse(db, traverse_fn, NULL);
+ if (error_count == 0) {
+ tdb_traverse_read(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<num_procs-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 (getpid() != pids[0]) {
+ return error_count;
+ }
+
+ for (i=1;i<num_procs;i++) {
+ int status, j;
+ pid_t pid;
+ if (error_count != 0) {
+ /* try and stop the test on any failure */
+ for (j=1;j<num_procs;j++) {
+ if (pids[j] != 0) {
+ kill(pids[j], SIGTERM);
+ }
}
- if (WEXITSTATUS(status) != 0) {
- printf("child %d exited with status %d\n",
- (int)pids[i+1], WEXITSTATUS(status));
- exit(1);
- }
}
- if (log_count == 0) {
- printf("OK\n");
+ pid = waitpid(-1, &status, 0);
+ if (pid == -1) {
+ perror("failed to wait for child\n");
+ exit(1);
}
+ for (j=1;j<num_procs;j++) {
+ if (pids[j] == pid) break;
+ }
+ if (j == num_procs) {
+ printf("unknown child %d exited!?\n", pid);
+ exit(1);
+ }
+ if (WEXITSTATUS(status) != 0) {
+ printf("child %d exited with status %d\n",
+ (int)pid, WEXITSTATUS(status));
+ error_count++;
+ }
+ pids[j] = 0;
}
- if (log_count != 0) {
- exit(1);
+ if (error_count == 0) {
+ printf("OK\n");
}
return 0;
More information about the samba-cvs
mailing list