diff options
Diffstat (limited to 'lib/net/ssh/connection')
-rw-r--r-- | lib/net/ssh/connection/session.rb | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/net/ssh/connection/session.rb b/lib/net/ssh/connection/session.rb index eac0721..de53766 100644 --- a/lib/net/ssh/connection/session.rb +++ b/lib/net/ssh/connection/session.rb @@ -475,6 +475,9 @@ module Net; module SSH; module Connection send(MAP[packet.type], packet) end + rescue + force_channel_cleanup_on_close if closed? + raise end # Returns the next available channel id to be assigned, and increments @@ -483,6 +486,16 @@ module Net; module SSH; module Connection @channel_id_counter += 1 end + def force_channel_cleanup_on_close + channels.each do |id, channel| + channel.remote_closed! + channel.close + + cleanup_channel(channel) + channel.do_close + end + end + # Invoked when a global request is received. The registered global # request callback will be invoked, if one exists, and the necessary # reply returned. |