Fix a timeout exception causing unhandled exception crash (#492) (#494)
authorSung Yoon Whang <suwhang@microsoft.com>
Sat, 21 Sep 2019 00:29:30 +0000 (17:29 -0700)
committerGitHub <noreply@github.com>
Sat, 21 Sep 2019 00:29:30 +0000 (17:29 -0700)
* Fix a timeout exception causing unhandled exception crash

* Fix the same issue on Unix too

* Move the exception handling to StopMonitor to distinguish actually incompatible runtimes from early exits

* fix build error

src/Tools/dotnet-counters/CounterMonitor.cs

index 3649444b2db35447c90eb4b137e1c60d78747bc2..d7cf5ebbac3ff6622b6e8690dde8a269bfbe14bf 100644 (file)
@@ -76,6 +76,18 @@ namespace Microsoft.Diagnostics.Tools.Counters
                 // If the app we're monitoring exits abruptly, this may throw in which case we just swallow the exception and exit gracefully.
                 Debug.WriteLine($"[ERROR] {ex.ToString()}");
             }
+            // We may time out if the process ended before we sent StopTracing command. We can just exit in that case.
+            catch (TimeoutException)
+            {
+            }
+            // On Unix platforms, we may actually get a PNSE since the pipe is gone with the process, and Runtime Client Library
+            // does not know how to distinguish a situation where there is no pipe to begin with, or where the process has exited
+            // before dotnet-counters and got rid of a pipe that once existed.
+            // Since we are catching this in StopMonitor() we know that the pipe once existed (otherwise the exception would've 
+            // been thrown in StartMonitor directly)
+            catch (PlatformNotSupportedException)
+            {
+            }
         }
 
         public async Task<int> Monitor(CancellationToken ct, List<string> counter_list, IConsole console, int processId, int refreshInterval)