From 6e69223dc262755c2cd2a3bba5c188d8fc91943a Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Thu, 13 May 2021 18:22:05 +0100 Subject: [PATCH] Close agent named-pipe handles when queries complete. I was cleaning up the 'struct handle', but not the underlying HANDLE. As a result, any PuTTY process that makes a request to Pageant keeps the named pipe connection open until the end of the process's lifetime. --- windows/agent-client.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/windows/agent-client.c b/windows/agent-client.c index 5109b0f0..4eb0bcfb 100644 --- a/windows/agent-client.c +++ b/windows/agent-client.c @@ -163,6 +163,7 @@ bool agent_exists(void) struct agent_pending_query { struct handle *handle; + HANDLE os_handle; strbuf *response; void (*callback)(void *, void *, int); void *callback_ctx; @@ -260,6 +261,7 @@ static agent_pending_query *named_pipe_agent_query( pq = snew(agent_pending_query); pq->handle = handle_input_new(pipehandle, named_pipe_agent_gotdata, pq, 0); + pq->os_handle = pipehandle; pipehandle = INVALID_HANDLE_VALUE; /* prevent it being closed below */ pq->response = strbuf_new_nm(); pq->callback = callback; @@ -284,6 +286,7 @@ static agent_pending_query *named_pipe_agent_query( void agent_cancel_query(agent_pending_query *pq) { handle_free(pq->handle); + CloseHandle(pq->os_handle); if (pq->response) strbuf_free(pq->response); sfree(pq);