sshnet / sshnet/SSH.NET

SshClient - thread gets blocked indefinitely, lock not released

Offen
#755 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Vorherrschende Sprache
C#
Sterne
4.4k
Forks
993
Ø Merge
9 T. 21 Std.
Gemergte PRs (30 T.)
1

Beschreibung

Using version 2020.0.0-beta1 SshClient, I was doing some load testing, and consistently encountered an issue when executing commands for an extended period of time using a single client instance (a few hours running around 1M commands).

When running the SshCommand.Execute() method, the method SemaphoreLight.Wait() waits for a lock to be released indefinitely. (SemaphoreLight.cs : Line 110)

Call stack:
System.Private.CoreLib.dll!System.Threading.Monitor.Wait(object obj, int millisecondsTimeout, bool exitContext)
Renci.SshNet.dll!Renci.SshNet.Common.SemaphoreLight.Wait()
Renci.SshNet.dll!Renci.SshNet.Channels.ChannelSession.SendChannelOpenMessage()
Renci.SshNet.dll!Renci.SshNet.Channels.ChannelSession.Open()
Renci.SshNet.dll!Renci.SshNet.SshCommand.BeginExecute(System.AsyncCallback callback, object state)

As a workaround, disposing and recreating the SshClient object after every 10000 executions solved the problem.

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne mit SshCommand.Execute und dem Aufrufpfad von BeginExecute und untersuche dann ChannelSession.Open sowie SemaphoreLight.cs um Zeile 110. Reproduziere den im Issue beschriebenen lang laufenden Lasttest mit einem SshClient und beobachte, wo das Warten blockiert bleibt. Als abgeschlossen gilt die Aufgabe, wenn eine verlängerte Befehlsausführung den Client nicht mehr auf unbestimmte Zeit warten lässt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
csharp
Bereich
networking
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.