From ea9bab77dbe6d847a8b387ecc9ad9720fc6c2921 Mon Sep 17 00:00:00 2001 From: Nikolay Pianikov Date: Fri, 31 Jan 2025 12:29:06 +0300 Subject: [PATCH] Deadlock on application exit when an error occurs in case of asynchronous Program.main() --- .github/workflows/main.yml | 65 ++++++++++++++++++++++++++- CSharpInteractive/Core/Environment.cs | 8 ---- 2 files changed, 63 insertions(+), 10 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ce3b1ab..e75f358 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,9 +1,10 @@ -name: CSharpInteractive check +name: CSharpInteractive build on: [ push, pull_request ] jobs: - build: + + ubuntu build: runs-on: ubuntu-latest @@ -32,3 +33,63 @@ jobs: - name: Build run: dotnet run --project ./Build + + mac build: + + runs-on: macos-latest + + steps: + - uses: actions/checkout@v4 + + - name: Setup .NET 6 + uses: actions/setup-dotnet@v3 + with: + dotnet-version: '6.0.x' + + - name: Setup .NET 7 + uses: actions/setup-dotnet@v3 + with: + dotnet-version: '7.0.x' + + - name: Setup .NET 8 + uses: actions/setup-dotnet@v3 + with: + dotnet-version: '8.0.x' + + - name: Setup .NET 9 + uses: actions/setup-dotnet@v3 + with: + dotnet-version: '9.0.x' + + - name: Build + run: dotnet run --project ./Build + + windows build: + + runs-on: windows-latest + + steps: + - uses: actions/checkout@v4 + + - name: Setup .NET 6 + uses: actions/setup-dotnet@v3 + with: + dotnet-version: '6.0.x' + + - name: Setup .NET 7 + uses: actions/setup-dotnet@v3 + with: + dotnet-version: '7.0.x' + + - name: Setup .NET 8 + uses: actions/setup-dotnet@v3 + with: + dotnet-version: '8.0.x' + + - name: Setup .NET 9 + uses: actions/setup-dotnet@v3 + with: + dotnet-version: '9.0.x' + + - name: Build + run: dotnet run --project ./Build diff --git a/CSharpInteractive/Core/Environment.cs b/CSharpInteractive/Core/Environment.cs index d118be2..ed680e4 100644 --- a/CSharpInteractive/Core/Environment.cs +++ b/CSharpInteractive/Core/Environment.cs @@ -86,14 +86,6 @@ public void Exit(int exitCode) return; } - WindowsNativeExit(exitCode); - var exitThread = new Thread(() => System.Environment.Exit(exitCode)); - exitThread.Start(); - if (exitThread.Join(100)) - { - return; - } - NativeExit(exitCode); }