(empth_init_signals): Don't catch SIGINT and SIGTERM.

(empth_wait_for_shutdown): New.
(main): Use it to wait for shutdown signal, then shut down.  Closes
#770492.
(empth_exit): Remove the weird special case for main thread.

Implement empth_wait_for_shutdown() for EMPTH_LWP:
[EMPTH_LWP] (lwpInitSigWait, lwpSigWait, lwpSigWakeup): New.
Declaration of lwpSigWait was accidentally committed in the previous
revision of lwp.h.
[EMPTH_LWP] (lwpInitSystem): New parameter waitset, pass it on to
lwpInitSigWait().
[EMPTH_LWP] (lwpReschedule): Call lwpSigWakeup().
[EMPTH_LWP] (empth_init): Declare signals needed by
empth_wait_for_shutdown().
(empth_wait_for_shutdown): Implement on top of lwpSigWait().

Implement empth_wait_for_shutdown() for EMPTH_POSIX:
[EMPTH_POSIX] (empth_init): Block signals, so that
empth_wait_for_shutdown() can use sigwait() safely.
(empth_wait_for_shutdown): Implement on top of sigwait().

Implement empth_wait_for_shutdown() for EMPTH_W32:
(empth_wait_for_shutdown): Implement on top of loc_BlockMainThread().
This commit is contained in:
Markus Armbruster 2006-06-07 21:01:16 +00:00
parent f51769659c
commit 7183516d91
10 changed files with 251 additions and 71 deletions

View file

@ -24,6 +24,7 @@
#ifndef LWP_H
#define LWP_H
#include <signal.h>
#include "misc.h"
#define LWP_STACKCHECK 0x1
@ -37,7 +38,7 @@ struct lwpSem;
#define LWP_MAX_PRIO 8
struct lwpProc *lwpInitSystem(int prio, char **ctxp, int flags);
struct lwpProc *lwpInitSystem(int prio, char **ctxp, int flags, sigset_t *);
struct lwpProc *lwpCreate(int prio, void (*)(void *), int size,
int flags, char *name, char *desc,
int argc, char **argv, void *ud);