From 95db6cc62c3f14997ddb70c85f84ac1b8d9282ab Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Mon, 25 Oct 2010 16:30:09 +0200 Subject: [PATCH] sftp_close_handle: free any trailing write chunks --- src/sftp.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/sftp.c b/src/sftp.c index 8df4fe1..2c163df 100644 --- a/src/sftp.c +++ b/src/sftp.c @@ -1757,6 +1757,7 @@ sftp_close_handle(LIBSSH2_SFTP_HANDLE *handle) ssize_t packet_len = handle->handle_len + 13; unsigned char *s, *data = NULL; int rc; + struct sftp_write_chunk *chunk; if (handle->close_state == libssh2_NB_state_idle) { _libssh2_debug(session, LIBSSH2_TRACE_SFTP, "Closing handle"); @@ -1832,6 +1833,18 @@ sftp_close_handle(LIBSSH2_SFTP_HANDLE *handle) LIBSSH2_FREE(session, handle->u.dir.names_packet); } + /* remove pending write chunks */ + do { + chunk = _libssh2_list_first(&handle->write_list); + if(chunk) { + struct sftp_write_chunk *next = + _libssh2_list_next(&chunk->node); + _libssh2_list_remove(&chunk->node); + LIBSSH2_FREE(session, chunk); + chunk = next; + } + } while(chunk); + handle->close_state = libssh2_NB_state_idle; LIBSSH2_FREE(session, handle);