summaryrefslogtreecommitdiff
path: root/lib/net/ssh/connection/session.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/net/ssh/connection/session.rb')
-rw-r--r--lib/net/ssh/connection/session.rb13
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.