SshClient - thread gets blocked indefinitely, lock not released
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
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Ö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