FORWARD _PROTOTYPE( void handle_sig, (int proc_nr, sigset_t sig_map) );
FORWARD _PROTOTYPE( void cause_sigalrm, (struct timer *tp) );
-
/*===========================================================================*
* do_sigaction *
*===========================================================================*/
return(SUSPEND);
}
-
/*===========================================================================*
* do_sigreturn *
*===========================================================================*/
return(SUSPEND); /* prevents sending reply */
}
-
/*===========================================================================*
* handle_sig *
*===========================================================================*/
}
}
-
/*===========================================================================*
* do_alarm *
*===========================================================================*/
return(set_alarm(who, m_in.seconds));
}
-
/*===========================================================================*
* set_alarm *
*===========================================================================*/
return(remaining);
}
-
/*===========================================================================*
* cause_sigalrm *
*===========================================================================*/
check_sig(rmp->mp_pid, SIGALRM);
}
-
/*===========================================================================*
* do_pause *
*===========================================================================*/
return(SUSPEND);
}
-
/*===========================================================================*
* sig_proc *
*===========================================================================*/
sigaddset(&rmp->mp_sigpending, signo);
return;
}
+#if ENABLE_SWAP
if (rmp->mp_flags & ONSWAP) {
/* Process is swapped out, leave signal pending. */
sigaddset(&rmp->mp_sigpending, signo);
swap_inqueue(rmp);
return;
}
-
+#endif
sigflags = rmp->mp_sigact[signo].sa_flags;
if (sigismember(&rmp->mp_catch, signo)) {
if (rmp->mp_flags & SIGSUSPENDED)
rmp->mp_sigstatus = (char) signo;
if (sigismember(&core_sset, signo)) {
+#if ENABLE_SWAP
if (rmp->mp_flags & ONSWAP) {
/* Process is swapped out, leave signal pending. */
sigaddset(&rmp->mp_sigpending, signo);
swap_inqueue(rmp);
return;
}
+#endif
/* Switch to the user's FS environment and dump core. */
tell_fs(CHDIR, slot, FALSE, 0);
dump_core(rmp);
pm_exit(rmp, 0); /* terminate process */
}
-
/*===========================================================================*
* check_sig *
*===========================================================================*/
return(count > 0 ? OK : error_code);
}
-
/*===========================================================================*
* check_pending *
*===========================================================================*/
}
}
-
/*===========================================================================*
* unpause *
*===========================================================================*/
tell_fs(UNPAUSE, pro, 0, 0);
}
-
/*===========================================================================*
* dump_core *
*===========================================================================*/
}
close(fd);
}
+