From 11b89407f5d225e461a266a9c7f23299e5314abf 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. (cherry picked from commit 6e69223dc262755c2cd2a3bba5c188d8fc91943a) --- windows/winpgntc.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/windows/winpgntc.c b/windows/winpgntc.c index f0f45dd6..557dc532 100644 --- a/windows/winpgntc.c +++ b/windows/winpgntc.c @@ -169,6 +169,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; @@ -266,6 +267,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; @@ -290,6 +292,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);