Browse Source

Ensure dequeue on bad requests or without response in NetDriver.

BDisp 9 months ago
parent
commit
1645d1f956
1 changed files with 13 additions and 3 deletions
  1. 13 3
      Terminal.Gui/ConsoleDrivers/NetDriver.cs

+ 13 - 3
Terminal.Gui/ConsoleDrivers/NetDriver.cs

@@ -1435,7 +1435,7 @@ internal class NetDriver : ConsoleDriver
     internal ManualResetEventSlim _waitAnsiResponse = new (false);
     private readonly CancellationTokenSource _ansiResponseTokenSource = new ();
 
-    /// <inheritdoc />
+    /// <inheritdoc/>
     public override string WriteAnsiRequest (AnsiEscapeSequenceRequest ansiRequest)
     {
         _mainLoopDriver._netEvents.EscSeqRequests.Add (ansiRequest);
@@ -1457,11 +1457,21 @@ internal class NetDriver : ConsoleDriver
         }
         finally
         {
+            if (_mainLoopDriver is { })
+            {
+                _mainLoopDriver._netEvents._forceRead = false;
+            }
+
+            if (_mainLoopDriver._netEvents.EscSeqRequests.Statuses.Count > 0
+                && string.IsNullOrEmpty (_mainLoopDriver._netEvents.EscSeqRequests.Statuses.Peek ().AnsiRequest.Response))
+            {
+                // Bad request or no response at all
+                _mainLoopDriver._netEvents.EscSeqRequests.Statuses.Dequeue ();
+            }
+
             _waitAnsiResponse.Reset ();
         }
 
-        _mainLoopDriver._netEvents._forceRead = false;
-
         return ansiRequest.Response;
     }