X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=interactive.c;h=dda5f84e5184b398a10652bd45ddda941e3a703e;hp=f2e4a355012ce1aa3861ba8b7bec56443a80df8e;hb=56561c08cf6cfe28bccebc513bcec057d8bb9afa;hpb=06f33ca150a15c0c3ec97e3475bc05551839071e diff --git a/interactive.c b/interactive.c index f2e4a355..dda5f84e 100644 --- a/interactive.c +++ b/interactive.c @@ -33,6 +33,7 @@ struct i9e_private { bool line_handler_running; bool input_eof; bool caught_sigint; + bool caught_sigterm; }; static struct i9e_private i9e_private, *i9ep = &i9e_private; @@ -271,16 +272,19 @@ static void i9e_post_select(struct sched *s, struct task *t) char *buf; size_t sz; - if (i9ep->input_eof) { - t->error = -E_I9E_EOF; - return; - } + ret = -E_I9E_EOF; + if (i9ep->input_eof) + goto rm_btrn; + ret = -E_I9E_TERM_RQ; + if (i9ep->caught_sigterm) + goto rm_btrn; if (!btrn) { i9ep->caught_sigint = false; if (FD_ISSET(ici->fds[0], &s->rfds)) i9e_input(); return; } + ret = 0; if (i9ep->caught_sigint) goto rm_btrn; ret = btr_node_status(i9ep->stdout_btrn, 0, BTR_NT_LEAF); @@ -306,7 +310,7 @@ static void i9e_pre_select(struct sched *s, __a_unused struct task *t) { int ret; - if (i9ep->input_eof || i9ep->caught_sigint) { + if (i9ep->input_eof || i9ep->caught_sigint || i9ep->caught_sigterm) { sched_min_delay(s); return; } @@ -433,6 +437,8 @@ void i9e_signal_dispatch(int sig_num) reset_line_state(); i9ep->caught_sigint = true; } + if (sig_num == SIGTERM) + i9ep->caught_sigterm = true; } /**