Index: server-src/driver.c
===================================================================
RCS file: /cvsroot/amanda/amanda/server-src/driver.c,v
retrieving revision 1.58.2.34
diff -u -r1.58.2.34 driver.c
--- server-src/driver.c	2001/07/19 21:49:43	1.58.2.34
+++ server-src/driver.c	2001/09/14 17:37:52
@@ -145,6 +145,7 @@
     int result_argc;
     char *result_argv[MAX_ARGS+1];
     char *taper_program;
+    amwait_t retstat;
 
     for(fd = 3; fd < FD_SETSIZE; fd++) {
 	/*
@@ -412,7 +413,6 @@
 
     for(dumper = dmptable; dumper < dmptable + inparallel; dumper++) {
 	dumper_cmd(dumper, QUIT, NULL);
-	amfree(dumper->name);
     }
 
     if(taper)
@@ -420,7 +420,48 @@
 
     /* wait for all to die */
 
-    while(wait(NULL) != -1);
+    while(1) {
+	char number[NUM_STR_SIZE];
+	pid_t pid;
+	char *who;
+	char *what;
+	int code;
+
+	if((pid = wait(&retstat)) == -1) {
+	    if(errno == EINTR) continue;
+	    else break;
+	}
+	what = NULL;
+	if(! WIFEXITED(retstat)) {
+	    what = "signal";
+	    code = WTERMSIG(retstat);
+	} else if(WEXITSTATUS(retstat) != 0) {
+	    what = "code";
+	    code = WEXITSTATUS(retstat);
+	}
+	who = NULL;
+	for(dumper = dmptable; dumper < dmptable + inparallel; dumper++) {
+	    if(pid == dumper->pid) {
+		who = stralloc(dumper->name);
+	    }
+	}
+	if(pid == taper_pid) {
+	    who = stralloc("taper");
+	}
+	if(what != NULL && who == NULL) {
+	    ap_snprintf(number, sizeof(number), "%ld", (long)pid);
+	    who = stralloc2("unknown pid ", number);
+	}
+	if(who && what) {
+	    log_add(L_WARNING, "%s exited with %s %d\n", who, what, code);
+	    printf("driver: %s exited with %s %d\n", who, what, code);
+	}
+	amfree(who);
+    }
+
+    for(dumper = dmptable; dumper < dmptable + inparallel; dumper++) {
+	amfree(dumper->name);
+    }
 
     if(!degraded_mode) {
 	for(hdp = getconf_holdingdisks(); hdp != NULL; hdp = hdp->next) {
