mirror of
https://github.com/clearml/dropbear
synced 2025-01-31 19:07:28 +00:00
Tidy up behaviour when select() is interrupted. We follow normal
codepaths, just with no FDs set. --HG-- branch : channel-fix extra : convert_revision : d348546b80847bc0d42a7b5208bb31a54f1fdfaf
This commit is contained in:
parent
5b8a26f1d1
commit
dd06653e53
@ -143,28 +143,22 @@ void session_loop(void(*loophandler)()) {
|
|||||||
dropbear_exit("Terminated by signal");
|
dropbear_exit("Terminated by signal");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (val < 0) {
|
if (val < 0 && errno != EINTR) {
|
||||||
if (errno == EINTR) {
|
|
||||||
/* This must happen even if we've been interrupted, so that
|
|
||||||
* changed signal-handler vars can take effect etc */
|
|
||||||
if (loophandler) {
|
|
||||||
loophandler();
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
} else {
|
|
||||||
dropbear_exit("Error in select");
|
dropbear_exit("Error in select");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (val <= 0) {
|
||||||
|
/* If we were interrupted or the select timed out, we still
|
||||||
|
* want to iterate over channels etc for reading, to handle
|
||||||
|
* server processes exiting etc.
|
||||||
|
* We don't want to read/write FDs. */
|
||||||
|
FD_ZERO(&writefd);
|
||||||
|
FD_ZERO(&readfd);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check for auth timeout, rekeying required etc */
|
/* check for auth timeout, rekeying required etc */
|
||||||
checktimeouts();
|
checktimeouts();
|
||||||
|
|
||||||
if (val == 0) {
|
|
||||||
/* timeout */
|
|
||||||
TRACE(("select timeout"))
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* process session socket's incoming/outgoing data */
|
/* process session socket's incoming/outgoing data */
|
||||||
if (ses.sock != -1) {
|
if (ses.sock != -1) {
|
||||||
if (FD_ISSET(ses.sock, &writefd) && !isempty(&ses.writequeue)) {
|
if (FD_ISSET(ses.sock, &writefd) && !isempty(&ses.writequeue)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user