Skip to content

Commit 2785cc8

Browse files
committed
transports: ssh: disconnect session before freeing it
The function `ssh_stream_free` takes over the responsibility of closing channels and streams just before freeing their memory, but it does not do so for the session. In fact, we never disconnect the session ourselves at all, as libssh2 will not do so itself upon freeing the structure. Quoting the documentation of `libssh2_session_free`: > Frees all resources associated with a session instance. Typically > called after libssh2_session_disconnect_ex, The missing disconnect probably stems from a misunderstanding what it actually does. As we are already closing the TCP socket ourselves, the assumption was that no additional disconnect is required. But calling `libssh2_session_disconnect` will notify the server that we are cleanly closing the connection, such that the server can free his own resources. Add a call to `libssh2_session_disconnect` to fix that issue. [1]: https://www.libssh2.org/libssh2_session_free.html
1 parent 7bd129e commit 2785cc8

File tree

1 file changed

+1
-0
lines changed

1 file changed

+1
-0
lines changed

src/transports/ssh.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@ static void ssh_stream_free(git_smart_subtransport_stream *stream)
212212
}
213213

214214
if (s->session) {
215+
libssh2_session_disconnect(s->session, "closing transport");
215216
libssh2_session_free(s->session);
216217
s->session = NULL;
217218
}

0 commit comments

Comments
 (0)