diff options
-rw-r--r-- | CREDITS | 1 | ||||
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | serverloop.c | 5 |
3 files changed, 9 insertions, 1 deletions
@@ -67,6 +67,7 @@ Pekka Savola <pekkas@netcore.fi> - Bugfixes | |||
67 | Peter Kocks <peter.kocks@baygate.com> - Makefile fixes | 67 | Peter Kocks <peter.kocks@baygate.com> - Makefile fixes |
68 | Phil Hands <phil@hands.com> - Debian scripts, assorted patches | 68 | Phil Hands <phil@hands.com> - Debian scripts, assorted patches |
69 | Phil Karn <karn@ka9q.ampr.org> - Autoconf fixes | 69 | Phil Karn <karn@ka9q.ampr.org> - Autoconf fixes |
70 | Philippe WILLEM <Philippe.WILLEM@urssaf.fr> - Bugfixes | ||
70 | Phill Camp <P.S.S.Camp@ukc.ac.uk> - login code fix | 71 | Phill Camp <P.S.S.Camp@ukc.ac.uk> - login code fix |
71 | Rip Loomis <loomisg@cist.saic.com> - Solaris package support, fixes | 72 | Rip Loomis <loomisg@cist.saic.com> - Solaris package support, fixes |
72 | SAKAI Kiyotaka <ksakai@kso.netwk.ntt-at.co.jp> - Multiple bugfixes | 73 | SAKAI Kiyotaka <ksakai@kso.netwk.ntt-at.co.jp> - Multiple bugfixes |
@@ -1,3 +1,7 @@ | |||
1 | 20001028 | ||
2 | - (djm) fix select hack in serverloop.c from Philippe WILLEM | ||
3 | <Philippe.WILLEM@urssaf.fr> | ||
4 | |||
1 | 20001027 | 5 | 20001027 |
2 | - (djm) Increase REKEY_BYTES to 2^24 for arc4random | 6 | - (djm) Increase REKEY_BYTES to 2^24 for arc4random |
3 | 7 | ||
diff --git a/serverloop.c b/serverloop.c index d98d74c25..a9e478764 100644 --- a/serverloop.c +++ b/serverloop.c | |||
@@ -99,9 +99,10 @@ sigchld_handler(int sig) | |||
99 | error("Strange, got SIGCHLD and wait returned pid %d but child is %d", | 99 | error("Strange, got SIGCHLD and wait returned pid %d but child is %d", |
100 | wait_pid, child_pid); | 100 | wait_pid, child_pid); |
101 | if (WIFEXITED(child_wait_status) || | 101 | if (WIFEXITED(child_wait_status) || |
102 | WIFSIGNALED(child_wait_status)) | 102 | WIFSIGNALED(child_wait_status)) { |
103 | child_terminated = 1; | 103 | child_terminated = 1; |
104 | child_has_selected = 0; | 104 | child_has_selected = 0; |
105 | } | ||
105 | } | 106 | } |
106 | signal(SIGCHLD, sigchld_handler); | 107 | signal(SIGCHLD, sigchld_handler); |
107 | errno = save_errno; | 108 | errno = save_errno; |
@@ -112,6 +113,7 @@ sigchld_handler2(int sig) | |||
112 | int save_errno = errno; | 113 | int save_errno = errno; |
113 | debug("Received SIGCHLD."); | 114 | debug("Received SIGCHLD."); |
114 | child_terminated = 1; | 115 | child_terminated = 1; |
116 | child_has_selected = 0; | ||
115 | errno = save_errno; | 117 | errno = save_errno; |
116 | } | 118 | } |
117 | 119 | ||
@@ -678,6 +680,7 @@ server_loop2(void) | |||
678 | while ((pid = waitpid(-1, &status, WNOHANG)) > 0) | 680 | while ((pid = waitpid(-1, &status, WNOHANG)) > 0) |
679 | session_close_by_pid(pid, status); | 681 | session_close_by_pid(pid, status); |
680 | child_terminated = 0; | 682 | child_terminated = 0; |
683 | child_has_selected = 0; | ||
681 | signal(SIGCHLD, sigchld_handler2); | 684 | signal(SIGCHLD, sigchld_handler2); |
682 | } | 685 | } |
683 | channel_after_select(&readset, &writeset); | 686 | channel_after_select(&readset, &writeset); |