- do {
- n = wait(&waitb);
- } while (n != -1 && n != pid);
-#ifdef POSIX
- sigprocmask(SIG_UNBLOCK,&oldmask,&mask);
-#else
- sigsetmask(mask);
-#endif
-#ifdef POSIX
- if (WIFEXITED(waitb)) {
- n = WEXITSTATUS(waitb) + ERROR_TABLE_BASE_sms;
- log_priority = log_ERROR;
- com_err(whoami, n, " child exited with status %d",
- WEXITSTATUS(waitb));
-#else
- if (waitb.w_status) {
- n = waitb.w_retcode + ERROR_TABLE_BASE_sms;
- log_priority = log_ERROR;
- com_err(whoami, n, " child exited with status %d",
- waitb.w_retcode);
-#endif
- code = send_object(conn, (char *)&n, INTEGER_T);
- if (code) {
- exit(1);
+ do
+ n = wait(&waitb);
+ while (n != -1 && n != pid);
+
+ sigprocmask(SIG_UNBLOCK, &oldmask, &mask);
+ if ((WIFEXITED(waitb) && (WEXITSTATUS(waitb) != 0)) ||
+ WIFSIGNALED(waitb))
+ {
+ if (WIFSIGNALED(waitb))
+ {
+ n = MR_COREDUMP;
+ com_err(whoami, n, " child exited on signal %d",
+ WTERMSIG(waitb));
+ }
+ else
+ {
+ n = WEXITSTATUS(waitb) + ERROR_TABLE_BASE_sms;
+ com_err(whoami, n, " child exited with status %d",
+ WEXITSTATUS(waitb));