164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
|
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
|
+
-
-
-
-
-
+
+
+
+
+
+
|
static void sigchld_handler(int signum)
{
int save_errno = errno;
pid_t pid;
int status;
do {
pid = waitpid(-1, &status, WNOHANG);
if (pid == pty_child_pid && (WIFEXITED(status) || WIFSIGNALED(status))) {
pty_exit_code = status;
pty_child_dead = TRUE;
}
pid = waitpid(-1, &status, WNOHANG);
if (pid == pty_child_pid && (WIFEXITED(status) || WIFSIGNALED(status))) {
pty_exit_code = status;
pty_child_dead = TRUE;
}
} while(pid > 0);
errno = save_errno;
}
static void fatal_sig_handler(int signum)
{
putty_signal(signum, SIG_DFL);
cleanup_utmp();
|