diff options
author | milo <milo@r0ot.me> | 2011-04-13 23:51:52 +0200 |
---|---|---|
committer | milo <milo@r0ot.me> | 2011-04-14 00:09:35 +0200 |
commit | e04d30e083f43c6e0cbf939da600ea67a3396266 (patch) | |
tree | 0564c46ca040ed1bee85a59765218be3b08c9b05 | |
parent | 166ee451c500543db49e789b9bb2ed16db052f94 (diff) | |
download | libssh-e04d30e083f43c6e0cbf939da600ea67a3396266.tar.gz libssh-e04d30e083f43c6e0cbf939da600ea67a3396266.tar.xz libssh-e04d30e083f43c6e0cbf939da600ea67a3396266.zip |
Bug fix in ssh_poll_ctx_remove()
-rw-r--r-- | src/poll.c | 4 |
1 files changed, 4 insertions, 0 deletions
@@ -605,6 +605,7 @@ void ssh_poll_ctx_remove(ssh_poll_ctx ctx, ssh_poll_handle p) { if (ctx->polls_used > 0 && ctx->polls_used != i) { ctx->pollfds[i] = ctx->pollfds[ctx->polls_used]; ctx->pollptrs[i] = ctx->pollptrs[ctx->polls_used]; + ctx->pollptrs[i]->x.idx = i; } /* this will always leave at least chunk_size polls allocated */ @@ -897,6 +898,9 @@ int ssh_event_remove_fd(ssh_event event, socket_t fd) { p = event->ctx->pollptrs[i]; ssh_poll_ctx_remove(event->ctx, p); rc = SSH_OK; + /* restart the loop */ + used = event->ctx->polls_used; + i = 0; } } |