- do {
- n = wait(&waitb);
- } while (n != -1 && n != pid);
- if (waitb.w_status) {
- log_priority = log_ERROR;
- com_err(whoami, 0, "child exited with status %d", waitb.w_status);
- 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));
+ }
+ code = send_int(conn, n);
+ if (code)
+ exit(1);