Locally restart ssh_poll() upon EINTR.
BUG: https://red.libssh.org/issues/186 Reviewed-by: Aris Adamantiadis <aris@0xbadc0de.be> Signed-off-by: Sebastien Boving <seb@google.com>
Этот коммит содержится в:
родитель
f32e5f2191
Коммит
7ec798d3e7
@ -597,11 +597,17 @@ int ssh_poll_ctx_dopoll(ssh_poll_ctx ctx, int timeout) {
|
||||
ssh_poll_handle p;
|
||||
socket_t fd;
|
||||
int revents;
|
||||
struct ssh_timestamp ts;
|
||||
|
||||
if (!ctx->polls_used)
|
||||
return SSH_ERROR;
|
||||
|
||||
rc = ssh_poll(ctx->pollfds, ctx->polls_used, timeout);
|
||||
ssh_timestamp_init(&ts);
|
||||
do {
|
||||
int tm = ssh_timeout_update(&ts, timeout);
|
||||
rc = ssh_poll(ctx->pollfds, ctx->polls_used, tm);
|
||||
} while (rc == -1 && errno == EINTR);
|
||||
|
||||
if(rc < 0)
|
||||
return SSH_ERROR;
|
||||
if (rc == 0)
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user