diff --git a/src/session.c b/src/session.c index be206d7f..333bc04d 100644 --- a/src/session.c +++ b/src/session.c @@ -698,6 +698,7 @@ session_free(LIBSSH2_SESSION *session) LIBSSH2_PACKET *pkg; LIBSSH2_CHANNEL *ch; LIBSSH2_LISTENER *l; + struct transportpacket *p = &session->packet; if (session->free_state == libssh2_NB_state_idle) { _libssh2_debug(session, LIBSSH2_TRACE_TRANS, "Freeing session resource", @@ -919,6 +920,11 @@ session_free(LIBSSH2_SESSION *session) LIBSSH2_FREE(session, pkg); } + /* Cleanup remaining outgoing packet buffer */ + if (p->outbuf) { + LIBSSH2_FREE(session, p->outbuf); + } + if(session->socket_prev_blockstate) /* if the socket was previously blocking, put it back so */ session_nonblock(session->socket_fd, 0);