Skip to content

Commit 18f277d

Browse files
committed
Add Console.WriteLine(...) tracing to troubleshoot issue #335.
1 parent 66471e6 commit 18f277d

File tree

2 files changed

+53
-1
lines changed

2 files changed

+53
-1
lines changed

src/Renci.SshNet/Channels/Channel.cs

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,11 @@ protected virtual void OnEof()
398398
/// </summary>
399399
protected virtual void OnClose()
400400
{
401+
Console.WriteLine("[{0}] SSH_MSG_CHANNEL_CLOSE received from server {1}/{2}.",
402+
Thread.CurrentThread.ManagedThreadId,
403+
LocalChannelNumber,
404+
RemoteChannelNumber);
405+
401406
_closeMessageReceived = true;
402407

403408
// Signal that SSH_MSG_CHANNEL_CLOSE message was received from server.
@@ -407,6 +412,11 @@ protected virtual void OnClose()
407412
if (channelClosedWaitHandle != null)
408413
channelClosedWaitHandle.Set();
409414

415+
Console.WriteLine("[{0}] Closing channel after receiving SSH_MSG_CHANNEL_CLOSE from server {1}/{2}.",
416+
Thread.CurrentThread.ManagedThreadId,
417+
LocalChannelNumber,
418+
RemoteChannelNumber);
419+
410420
// close the channel
411421
Close();
412422
}
@@ -522,6 +532,11 @@ protected virtual void Close()
522532
// same time we would otherwise risk sending the SSH_MSG_CHANNEL_EOF after the SSH_MSG_CHANNEL_CLOSE
523533
// message causing the server to disconnect the session.
524534

535+
Console.WriteLine("[{0}] In Close() {1}/{2}.",
536+
Thread.CurrentThread.ManagedThreadId,
537+
LocalChannelNumber,
538+
RemoteChannelNumber);
539+
525540
lock (this)
526541
{
527542
// send EOF message first the following conditions are met:
@@ -532,8 +547,10 @@ protected virtual void Close()
532547
// * the session is connected
533548
if (!_eofMessageSent && !_closeMessageReceived && !_eofMessageReceived && IsOpen && IsConnected)
534549
{
550+
Console.WriteLine("[{0}] Sending SSH_MSG_CHANNEL_EOF for channel {1}/{2}.", Thread.CurrentThread.ManagedThreadId, LocalChannelNumber, RemoteChannelNumber);
535551
if (TrySendMessage(new ChannelEofMessage(RemoteChannelNumber)))
536552
{
553+
Console.WriteLine("[{0}] Sent SSH_MSG_CHANNEL_EOF for channel {1}/{2}.", Thread.CurrentThread.ManagedThreadId, LocalChannelNumber, RemoteChannelNumber);
537554
_eofMessageSent = true;
538555
}
539556
}
@@ -542,21 +559,38 @@ protected virtual void Close()
542559
// and the channel is open and the session is connected
543560
if (!_closeMessageSent && IsOpen && IsConnected)
544561
{
562+
Console.WriteLine("[{0}] Sending SSH_MSG_CHANNEL_CLOSE for channel {1}/{2}.", Thread.CurrentThread.ManagedThreadId, LocalChannelNumber, RemoteChannelNumber);
545563
if (TrySendMessage(new ChannelCloseMessage(RemoteChannelNumber)))
546564
{
565+
Console.WriteLine("[{0}] Sent SSH_MSG_CHANNEL_CLOSE for channel {1}/{2}.", Thread.CurrentThread.ManagedThreadId, LocalChannelNumber, RemoteChannelNumber);
547566
_closeMessageSent = true;
548567

549568
// only wait for the channel to be closed by the server if we didn't send a
550569
// SSH_MSG_CHANNEL_CLOSE as response to a SSH_MSG_CHANNEL_CLOSE sent by the
551570
// server
571+
Console.WriteLine("[{0}] Waiting for server to close channel {1}/{2}.", Thread.CurrentThread.ManagedThreadId, LocalChannelNumber, RemoteChannelNumber);
552572
try
553573
{
554574
WaitOnHandle(_channelClosedWaitHandle);
575+
Console.WriteLine("[{0}] Finished waiting for server to close channel {1}/{2}.", Thread.CurrentThread.ManagedThreadId, LocalChannelNumber, RemoteChannelNumber);
555576
}
556-
catch (SshConnectionException)
577+
catch (SshConnectionException ex)
557578
{
579+
Console.WriteLine("[{0}] SSH connection exception waiting for server to close channel {1}/{2}: {3}.",
580+
Thread.CurrentThread.ManagedThreadId,
581+
LocalChannelNumber,
582+
RemoteChannelNumber,
583+
ex.ToString());
558584
// ignore connection failures as we're closing the channel anyway
559585
}
586+
catch (Exception ex)
587+
{
588+
Console.WriteLine("[{0}] Exception waiting for server to close channel {1}/{2}: {3}.",
589+
Thread.CurrentThread.ManagedThreadId,
590+
LocalChannelNumber,
591+
RemoteChannelNumber,
592+
ex.ToString());
593+
}
560594
}
561595
}
562596

src/Renci.SshNet/ShellStream.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -695,6 +695,9 @@ public void WriteLine(string line)
695695
/// <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
696696
protected override void Dispose(bool disposing)
697697
{
698+
Console.WriteLine("[{0}] Disposing ShellStream.",
699+
Thread.CurrentThread.ManagedThreadId);
700+
698701
base.Dispose(disposing);
699702

700703
if (_isDisposed)
@@ -706,9 +709,16 @@ protected override void Dispose(bool disposing)
706709

707710
if (_channel != null)
708711
{
712+
Console.WriteLine("[{0}] Disposing channel from ShellStream.Dispose(bool).",
713+
Thread.CurrentThread.ManagedThreadId);
714+
709715
_channel.DataReceived -= Channel_DataReceived;
710716
_channel.Closed -= Channel_Closed;
711717
_channel.Dispose();
718+
719+
Console.WriteLine("[{0}] Disposed channel from ShellStream.Dispose(bool).",
720+
Thread.CurrentThread.ManagedThreadId);
721+
712722
_channel = null;
713723
}
714724

@@ -750,11 +760,19 @@ private void Session_ErrorOccured(object sender, ExceptionEventArgs e)
750760
private void Session_Disconnected(object sender, EventArgs e)
751761
{
752762
if (_channel != null)
763+
{
764+
Console.WriteLine("[{0}] Disposing channel from Session_Disconnected(...).",
765+
Thread.CurrentThread.ManagedThreadId);
766+
753767
_channel.Dispose();
768+
}
754769
}
755770

756771
private void Channel_Closed(object sender, ChannelEventArgs e)
757772
{
773+
Console.WriteLine("[{0}] Disposing ShellStream from Channel_Closed(...).",
774+
Thread.CurrentThread.ManagedThreadId);
775+
758776
// TODO: Do we need to call dispose here ??
759777
Dispose();
760778
}

0 commit comments

Comments
 (0)