From 2068973ff3ba6444f57494d2586f9aced3a23643 Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Sun, 22 Dec 2013 22:08:45 +0100 Subject: poll: Correctly free ssh_event_fd_wrapper. This is allocated by ssh_event_add_fd. --- src/poll.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/poll.c b/src/poll.c index 2fce52a3..4d92e3f3 100644 --- a/src/poll.c +++ b/src/poll.c @@ -852,12 +852,18 @@ int ssh_event_remove_fd(ssh_event event, socket_t fd) { for (i = 0; i < used; i++) { if(fd == event->ctx->pollfds[i].fd) { ssh_poll_handle p = event->ctx->pollptrs[i]; - struct ssh_event_fd_wrapper *pw = p->cb_data; + if (p->cb == ssh_event_fd_wrapper_callback) { + struct ssh_event_fd_wrapper *pw = p->cb_data; + SAFE_FREE(pw); + } - ssh_poll_ctx_remove(event->ctx, p); - free(pw); + /* + * The free function calls ssh_poll_ctx_remove() and decrements + * event->ctx->polls_used. + */ ssh_poll_free(p); rc = SSH_OK; + /* restart the loop */ used = event->ctx->polls_used; i = 0; -- cgit v1.2.3