Sync OpenBSD patchset 466:

Clear signal flags /before/ taking action and continue afterwards to reduce
chance of dropping signals. Pointed out by deraadt@.
pull/1/head
Tiago Cunha 2009-10-28 23:11:07 +00:00
parent d0afc47bfb
commit e65aa04ad7
2 changed files with 12 additions and 7 deletions

View File

@ -1,4 +1,4 @@
/* $Id: client.c,v 1.81 2009-10-23 17:38:42 tcunha Exp $ */
/* $Id: client.c,v 1.82 2009-10-28 23:11:07 tcunha Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -189,17 +189,20 @@ client_main(void)
client_write_server(MSG_EXITING, NULL, 0);
}
if (sigchld) {
waitpid(WAIT_ANY, NULL, WNOHANG);
sigchld = 0;
waitpid(WAIT_ANY, NULL, WNOHANG);
continue;
}
if (sigwinch) {
sigwinch = 0;
client_write_server(MSG_RESIZE, NULL, 0);
sigwinch = 0;
continue;
}
if (sigcont) {
sigcont = 0;
siginit();
client_write_server(MSG_WAKEUP, NULL, 0);
sigcont = 0;
continue;
}
pfd.fd = client_ibuf.fd;

View File

@ -1,4 +1,4 @@
/* $Id: server.c,v 1.211 2009-10-23 17:49:47 tcunha Exp $ */
/* $Id: server.c,v 1.212 2009-10-28 23:11:07 tcunha Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -331,15 +331,17 @@ server_main(int srv_fd)
/* Handle child exit. */
if (sigchld) {
server_child_signal();
sigchld = 0;
server_child_signal();
continue;
}
/* Recreate socket on SIGUSR1. */
if (sigusr1) {
sigusr1 = 0;
close(srv_fd);
srv_fd = server_create_socket();
sigusr1 = 0;
continue;
}
/* Initialise pollfd array and add server socket. */