diff --git a/common-channel.c b/common-channel.c index 5f4e92d..8a10105 100644 --- a/common-channel.c +++ b/common-channel.c @@ -255,8 +255,6 @@ void channelio(fd_set *readfds, fd_set *writefds) { } } - ses.channel_signal_pending = 0; - #ifdef USING_LISTENERS handle_listeners(readfds); #endif diff --git a/common-session.c b/common-session.c index 96d747d..874d539 100644 --- a/common-session.c +++ b/common-session.c @@ -162,6 +162,7 @@ void session_loop(void(*loophandler)()) { /* We get woken up when signal handlers write to this pipe. SIGCHLD in svr-chansession is the only one currently. */ FD_SET(ses.signal_pipe[0], &readfd); + ses.channel_signal_pending = 0; /* set up for channels which can be read/written */ setchannelfds(&readfd, &writefd, writequeue_has_space); @@ -211,7 +212,9 @@ void session_loop(void(*loophandler)()) { wake up the select() above. */ if (FD_ISSET(ses.signal_pipe[0], &readfd)) { char x; + TRACE(("signal pipe set")) while (read(ses.signal_pipe[0], &x, 1) > 0) {} + ses.channel_signal_pending = 1; } /* check for auth timeout, rekeying required etc */