[mono] Restore signal handlers during crash chaining - #125835

Merged
lateralusX merged 1 commit into
dotnet:mainfrom
jpnurmi:fix/mono-crash-chaining
Apr 24, 2026
Merged

[mono] Restore signal handlers during crash chaining#125835
lateralusX merged 1 commit into
dotnet:mainfrom
jpnurmi:fix/mono-crash-chaining

Conversation

@jpnurmi

@jpnurmijpnurmi commented Mar 20, 2026

Copy link
Copy Markdown
Contributor

This change is part of the effort to fix native crash reporting for .NET Android apps (getsentry/sentry-dotnet#3954). Sentry would like to install signal handlers before Mono to capture native crashes. However, mono_handle_native_crash unconditionally resets SIGABRT, SIGILL, SIGCHLD, and SIGQUIT to SIG_DFL, even when crash_chaining is enabled, killing the process before the chained handler can run.

Expose static remove_signal_handler as mono_runtime_posix_restore_handler and use it in mono_handle_native_crash to restore pre-Mono signal handlers instead of resetting to SIG_DFL. The saved handlers are kept in the hash table so that mono_chain_signal can still chain to them if needed. When signal chaining is disabled, there are no saved handlers, so it falls back to SIG_DFL, same as before.

Includes an Android functional test (CrashChaining) that verifies signal handlers are preserved during crash chaining.

CopilotAI review requested due to automatic review settings March 20, 2026 14:59
@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Mar 20, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @akoeplinger, @matouskozak, @simonrozsival
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes Mono’s native-crash handling behavior when crash chaining is enabled so that Mono does not reset key signal handlers to SIG_DFL during mono_handle_native_crash, which can otherwise cause secondary signals (notably on Android) to terminate the process before crash chaining completes.

Changes:

  • Guard signal-handler resets in mono_handle_native_crash behind !mono_do_crash_chaining.
  • Add an Android functional test that installs a pre-Mono SIGSEGV handler, triggers a native crash, and validates SIGABRT was not reset to SIG_DFL.
  • Wire the test via the Android app template using an environment-variable gate (TEST_CRASH_CHAINING).

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

FileDescription
src/mono/mono/mini/mini-exceptions.cAvoids resetting signal handlers to defaults when crash chaining is enabled.
src/tasks/AndroidAppBuilder/Templates/monodroid.cAdds a crash-chaining functional test path (env-gated) and native test helpers.
src/tests/FunctionalTests/Android/Device_Emulator/CrashChaining/Program.csManaged entrypoint invoking the native test and mapping success to exit code 42.
src/tests/FunctionalTests/Android/Device_Emulator/CrashChaining/Android.Device_Emulator.CrashChaining.Test.csprojNew Android functional test project definition + env var injection.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
CopilotAI review requested due to automatic review settings March 20, 2026 15:26
@jpnurmijpnurmi changed the title [mono] Preserve signal handlers during crash chaining in mono_handle_native_crash[mono] Preserve signal handlers during crash chainingMar 20, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
@jpnurmi

Copy link
Copy Markdown
ContributorAuthor

@dotnet-policy-service agree company="Sentry"

CopilotAI review requested due to automatic review settings March 23, 2026 16:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
CopilotAI review requested due to automatic review settings March 26, 2026 15:25

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
CopilotAI review requested due to automatic review settings March 31, 2026 11:59

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 1 comment.

Comment threadsrc/tasks/AndroidAppBuilder/ApkBuilder.cs Outdated
CopilotAI review requested due to automatic review settings March 31, 2026 12:33

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 1 comment.

Comment threadsrc/mono/mono/mini/mini-posix.c
Comment threadsrc/mono/mono/mini/mini-runtime.h Outdated
jpnurmi added a commit to getsentry/sentry-native that referenced this pull request Mar 31, 2026
- Mono: chain-at-start (preload requires dotnet/runtime#125835)
- CoreCLR: preload (chain-at-start blocked by libsigchain)
- Auto-build the NDK AAR for preload tests
jpnurmi added a commit to getsentry/sentry-native that referenced this pull request Mar 31, 2026
- Mono: chain-at-start (preload requires dotnet/runtime#125835)
- CoreCLR: preload (chain-at-start blocked by libsigchain)
- Auto-build the NDK AAR for preload tests
CopilotAI review requested due to automatic review settings April 8, 2026 16:45
@jpnurmi
jpnurmiforce-pushed the fix/mono-crash-chaining branch from 23c53f4 to d7d452dCompareApril 8, 2026 16:45

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 2 comments.

Comment threadsrc/mono/mono/mini/mini-exceptions.c
Comment threadsrc/mono/mono/mini/mini-runtime.h

@lateralusXlateralusX left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thanks!

@jpnurmi

Copy link
Copy Markdown
ContributorAuthor

Hi, is there anything I can do to help land this? The CI failures all look unrelated. Happy to rebase again if that helps.

@lateralusX

Copy link
Copy Markdown
Member

Give it a rebase and I make sure to carry it through.

Expose static remove_signal_handler as mono_runtime_posix_restore_handler
and use it in mono_handle_native_crash to restore pre-Mono signal handlers
instead of resetting to SIG_DFL. The saved handlers are kept in the hash
table so that mono_chain_signal can still chain to them if needed. When
signal chaining is disabled, there are no saved handlers, so it falls back
to SIG_DFL, same as before.
Includes an Android functional test (CrashChaining) that installs pre-Mono
SIGSEGV and SIGABRT handlers and verifies they are preserved during crash
chaining.
@jpnurmi
jpnurmiforce-pushed the fix/mono-crash-chaining branch from d7d452d to 2faff44CompareApril 23, 2026 07:54
@lateralusX

Copy link
Copy Markdown
Member

This only affects Mono related sources and CoreCLR failures appears in other PR's, System.Diagnostics.Tests.ProcessWaitingTests.ProcessSafeHandle_WaitForExitOrKillOnCancellationAsync_KillsOnCancellation.

@lateralusX

Copy link
Copy Markdown
Member

/ba-g #127287

@lateralusX
lateralusX merged commit 9c95d01 into dotnet:mainApr 24, 2026
175 of 179 checks passed
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 25, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructure-monocommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jpnurmi@lateralusX
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

[mono] Restore signal handlers during crash chaining - #125835

Merged
lateralusX merged 1 commit into
dotnet:mainfrom
jpnurmi:fix/mono-crash-chaining
Apr 24, 2026
Merged

[mono] Restore signal handlers during crash chaining#125835
lateralusX merged 1 commit into
dotnet:mainfrom
jpnurmi:fix/mono-crash-chaining

Conversation

@jpnurmi

@jpnurmijpnurmi commented Mar 20, 2026

Copy link
Copy Markdown
Contributor

This change is part of the effort to fix native crash reporting for .NET Android apps (getsentry/sentry-dotnet#3954). Sentry would like to install signal handlers before Mono to capture native crashes. However, mono_handle_native_crash unconditionally resets SIGABRT, SIGILL, SIGCHLD, and SIGQUIT to SIG_DFL, even when crash_chaining is enabled, killing the process before the chained handler can run.

Expose static remove_signal_handler as mono_runtime_posix_restore_handler and use it in mono_handle_native_crash to restore pre-Mono signal handlers instead of resetting to SIG_DFL. The saved handlers are kept in the hash table so that mono_chain_signal can still chain to them if needed. When signal chaining is disabled, there are no saved handlers, so it falls back to SIG_DFL, same as before.

Includes an Android functional test (CrashChaining) that verifies signal handlers are preserved during crash chaining.

CopilotAI review requested due to automatic review settings March 20, 2026 14:59
@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Mar 20, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @akoeplinger, @matouskozak, @simonrozsival
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes Mono’s native-crash handling behavior when crash chaining is enabled so that Mono does not reset key signal handlers to SIG_DFL during mono_handle_native_crash, which can otherwise cause secondary signals (notably on Android) to terminate the process before crash chaining completes.

Changes:

  • Guard signal-handler resets in mono_handle_native_crash behind !mono_do_crash_chaining.
  • Add an Android functional test that installs a pre-Mono SIGSEGV handler, triggers a native crash, and validates SIGABRT was not reset to SIG_DFL.
  • Wire the test via the Android app template using an environment-variable gate (TEST_CRASH_CHAINING).

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

FileDescription
src/mono/mono/mini/mini-exceptions.cAvoids resetting signal handlers to defaults when crash chaining is enabled.
src/tasks/AndroidAppBuilder/Templates/monodroid.cAdds a crash-chaining functional test path (env-gated) and native test helpers.
src/tests/FunctionalTests/Android/Device_Emulator/CrashChaining/Program.csManaged entrypoint invoking the native test and mapping success to exit code 42.
src/tests/FunctionalTests/Android/Device_Emulator/CrashChaining/Android.Device_Emulator.CrashChaining.Test.csprojNew Android functional test project definition + env var injection.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
CopilotAI review requested due to automatic review settings March 20, 2026 15:26
@jpnurmijpnurmi changed the title [mono] Preserve signal handlers during crash chaining in mono_handle_native_crash[mono] Preserve signal handlers during crash chainingMar 20, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
@jpnurmi

Copy link
Copy Markdown
ContributorAuthor

@dotnet-policy-service agree company="Sentry"

CopilotAI review requested due to automatic review settings March 23, 2026 16:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
CopilotAI review requested due to automatic review settings March 26, 2026 15:25

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
CopilotAI review requested due to automatic review settings March 31, 2026 11:59

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 1 comment.

Comment threadsrc/tasks/AndroidAppBuilder/ApkBuilder.cs Outdated
CopilotAI review requested due to automatic review settings March 31, 2026 12:33

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 1 comment.

Comment threadsrc/mono/mono/mini/mini-posix.c
Comment threadsrc/mono/mono/mini/mini-runtime.h Outdated
jpnurmi added a commit to getsentry/sentry-native that referenced this pull request Mar 31, 2026
- Mono: chain-at-start (preload requires dotnet/runtime#125835)
- CoreCLR: preload (chain-at-start blocked by libsigchain)
- Auto-build the NDK AAR for preload tests
jpnurmi added a commit to getsentry/sentry-native that referenced this pull request Mar 31, 2026
- Mono: chain-at-start (preload requires dotnet/runtime#125835)
- CoreCLR: preload (chain-at-start blocked by libsigchain)
- Auto-build the NDK AAR for preload tests
CopilotAI review requested due to automatic review settings April 8, 2026 16:45
@jpnurmi
jpnurmiforce-pushed the fix/mono-crash-chaining branch from 23c53f4 to d7d452dCompareApril 8, 2026 16:45

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 2 comments.

Comment threadsrc/mono/mono/mini/mini-exceptions.c
Comment threadsrc/mono/mono/mini/mini-runtime.h

@lateralusXlateralusX left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thanks!

@jpnurmi

Copy link
Copy Markdown
ContributorAuthor

Hi, is there anything I can do to help land this? The CI failures all look unrelated. Happy to rebase again if that helps.

@lateralusX

Copy link
Copy Markdown
Member

Give it a rebase and I make sure to carry it through.

Expose static remove_signal_handler as mono_runtime_posix_restore_handler
and use it in mono_handle_native_crash to restore pre-Mono signal handlers
instead of resetting to SIG_DFL. The saved handlers are kept in the hash
table so that mono_chain_signal can still chain to them if needed. When
signal chaining is disabled, there are no saved handlers, so it falls back
to SIG_DFL, same as before.
Includes an Android functional test (CrashChaining) that installs pre-Mono
SIGSEGV and SIGABRT handlers and verifies they are preserved during crash
chaining.
@jpnurmi
jpnurmiforce-pushed the fix/mono-crash-chaining branch from d7d452d to 2faff44CompareApril 23, 2026 07:54
@lateralusX

Copy link
Copy Markdown
Member

This only affects Mono related sources and CoreCLR failures appears in other PR's, System.Diagnostics.Tests.ProcessWaitingTests.ProcessSafeHandle_WaitForExitOrKillOnCancellationAsync_KillsOnCancellation.

@lateralusX

Copy link
Copy Markdown
Member

/ba-g #127287

@lateralusX
lateralusX merged commit 9c95d01 into dotnet:mainApr 24, 2026
175 of 179 checks passed
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 25, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructure-monocommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jpnurmi@lateralusX
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[mono] Restore signal handlers during crash chaining - #125835

Merged
lateralusX merged 1 commit into
dotnet:mainfrom
jpnurmi:fix/mono-crash-chaining
Apr 24, 2026
Merged

[mono] Restore signal handlers during crash chaining#125835
lateralusX merged 1 commit into
dotnet:mainfrom
jpnurmi:fix/mono-crash-chaining

Conversation

@jpnurmi

@jpnurmijpnurmi commented Mar 20, 2026

Copy link
Copy Markdown
Contributor

This change is part of the effort to fix native crash reporting for .NET Android apps (getsentry/sentry-dotnet#3954). Sentry would like to install signal handlers before Mono to capture native crashes. However, mono_handle_native_crash unconditionally resets SIGABRT, SIGILL, SIGCHLD, and SIGQUIT to SIG_DFL, even when crash_chaining is enabled, killing the process before the chained handler can run.

Expose static remove_signal_handler as mono_runtime_posix_restore_handler and use it in mono_handle_native_crash to restore pre-Mono signal handlers instead of resetting to SIG_DFL. The saved handlers are kept in the hash table so that mono_chain_signal can still chain to them if needed. When signal chaining is disabled, there are no saved handlers, so it falls back to SIG_DFL, same as before.

Includes an Android functional test (CrashChaining) that verifies signal handlers are preserved during crash chaining.

CopilotAI review requested due to automatic review settings March 20, 2026 14:59
@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Mar 20, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @akoeplinger, @matouskozak, @simonrozsival
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes Mono’s native-crash handling behavior when crash chaining is enabled so that Mono does not reset key signal handlers to SIG_DFL during mono_handle_native_crash, which can otherwise cause secondary signals (notably on Android) to terminate the process before crash chaining completes.

Changes:

  • Guard signal-handler resets in mono_handle_native_crash behind !mono_do_crash_chaining.
  • Add an Android functional test that installs a pre-Mono SIGSEGV handler, triggers a native crash, and validates SIGABRT was not reset to SIG_DFL.
  • Wire the test via the Android app template using an environment-variable gate (TEST_CRASH_CHAINING).

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

FileDescription
src/mono/mono/mini/mini-exceptions.cAvoids resetting signal handlers to defaults when crash chaining is enabled.
src/tasks/AndroidAppBuilder/Templates/monodroid.cAdds a crash-chaining functional test path (env-gated) and native test helpers.
src/tests/FunctionalTests/Android/Device_Emulator/CrashChaining/Program.csManaged entrypoint invoking the native test and mapping success to exit code 42.
src/tests/FunctionalTests/Android/Device_Emulator/CrashChaining/Android.Device_Emulator.CrashChaining.Test.csprojNew Android functional test project definition + env var injection.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
CopilotAI review requested due to automatic review settings March 20, 2026 15:26
@jpnurmijpnurmi changed the title [mono] Preserve signal handlers during crash chaining in mono_handle_native_crash[mono] Preserve signal handlers during crash chainingMar 20, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
@jpnurmi

Copy link
Copy Markdown
ContributorAuthor

@dotnet-policy-service agree company="Sentry"

CopilotAI review requested due to automatic review settings March 23, 2026 16:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
CopilotAI review requested due to automatic review settings March 26, 2026 15:25

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
CopilotAI review requested due to automatic review settings March 31, 2026 11:59

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 1 comment.

Comment threadsrc/tasks/AndroidAppBuilder/ApkBuilder.cs Outdated
CopilotAI review requested due to automatic review settings March 31, 2026 12:33

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 1 comment.

Comment threadsrc/mono/mono/mini/mini-posix.c
Comment threadsrc/mono/mono/mini/mini-runtime.h Outdated
jpnurmi added a commit to getsentry/sentry-native that referenced this pull request Mar 31, 2026
- Mono: chain-at-start (preload requires dotnet/runtime#125835)
- CoreCLR: preload (chain-at-start blocked by libsigchain)
- Auto-build the NDK AAR for preload tests
jpnurmi added a commit to getsentry/sentry-native that referenced this pull request Mar 31, 2026
- Mono: chain-at-start (preload requires dotnet/runtime#125835)
- CoreCLR: preload (chain-at-start blocked by libsigchain)
- Auto-build the NDK AAR for preload tests
CopilotAI review requested due to automatic review settings April 8, 2026 16:45
@jpnurmi
jpnurmiforce-pushed the fix/mono-crash-chaining branch from 23c53f4 to d7d452dCompareApril 8, 2026 16:45

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 2 comments.

Comment threadsrc/mono/mono/mini/mini-exceptions.c
Comment threadsrc/mono/mono/mini/mini-runtime.h

@lateralusXlateralusX left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thanks!

@jpnurmi

Copy link
Copy Markdown
ContributorAuthor

Hi, is there anything I can do to help land this? The CI failures all look unrelated. Happy to rebase again if that helps.

@lateralusX

Copy link
Copy Markdown
Member

Give it a rebase and I make sure to carry it through.

Expose static remove_signal_handler as mono_runtime_posix_restore_handler
and use it in mono_handle_native_crash to restore pre-Mono signal handlers
instead of resetting to SIG_DFL. The saved handlers are kept in the hash
table so that mono_chain_signal can still chain to them if needed. When
signal chaining is disabled, there are no saved handlers, so it falls back
to SIG_DFL, same as before.
Includes an Android functional test (CrashChaining) that installs pre-Mono
SIGSEGV and SIGABRT handlers and verifies they are preserved during crash
chaining.
@jpnurmi
jpnurmiforce-pushed the fix/mono-crash-chaining branch from d7d452d to 2faff44CompareApril 23, 2026 07:54
@lateralusX

Copy link
Copy Markdown
Member

This only affects Mono related sources and CoreCLR failures appears in other PR's, System.Diagnostics.Tests.ProcessWaitingTests.ProcessSafeHandle_WaitForExitOrKillOnCancellationAsync_KillsOnCancellation.

@lateralusX

Copy link
Copy Markdown
Member

/ba-g #127287

@lateralusX
lateralusX merged commit 9c95d01 into dotnet:mainApr 24, 2026
175 of 179 checks passed
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 25, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructure-monocommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jpnurmi@lateralusX
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[mono] Restore signal handlers during crash chaining - #125835

Merged
lateralusX merged 1 commit into
dotnet:mainfrom
jpnurmi:fix/mono-crash-chaining
Apr 24, 2026
Merged

[mono] Restore signal handlers during crash chaining#125835
lateralusX merged 1 commit into
dotnet:mainfrom
jpnurmi:fix/mono-crash-chaining

Conversation

@jpnurmi

@jpnurmijpnurmi commented Mar 20, 2026

Copy link
Copy Markdown
Contributor

This change is part of the effort to fix native crash reporting for .NET Android apps (getsentry/sentry-dotnet#3954). Sentry would like to install signal handlers before Mono to capture native crashes. However, mono_handle_native_crash unconditionally resets SIGABRT, SIGILL, SIGCHLD, and SIGQUIT to SIG_DFL, even when crash_chaining is enabled, killing the process before the chained handler can run.

Expose static remove_signal_handler as mono_runtime_posix_restore_handler and use it in mono_handle_native_crash to restore pre-Mono signal handlers instead of resetting to SIG_DFL. The saved handlers are kept in the hash table so that mono_chain_signal can still chain to them if needed. When signal chaining is disabled, there are no saved handlers, so it falls back to SIG_DFL, same as before.

Includes an Android functional test (CrashChaining) that verifies signal handlers are preserved during crash chaining.

CopilotAI review requested due to automatic review settings March 20, 2026 14:59
@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Mar 20, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @akoeplinger, @matouskozak, @simonrozsival
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes Mono’s native-crash handling behavior when crash chaining is enabled so that Mono does not reset key signal handlers to SIG_DFL during mono_handle_native_crash, which can otherwise cause secondary signals (notably on Android) to terminate the process before crash chaining completes.

Changes:

  • Guard signal-handler resets in mono_handle_native_crash behind !mono_do_crash_chaining.
  • Add an Android functional test that installs a pre-Mono SIGSEGV handler, triggers a native crash, and validates SIGABRT was not reset to SIG_DFL.
  • Wire the test via the Android app template using an environment-variable gate (TEST_CRASH_CHAINING).

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

FileDescription
src/mono/mono/mini/mini-exceptions.cAvoids resetting signal handlers to defaults when crash chaining is enabled.
src/tasks/AndroidAppBuilder/Templates/monodroid.cAdds a crash-chaining functional test path (env-gated) and native test helpers.
src/tests/FunctionalTests/Android/Device_Emulator/CrashChaining/Program.csManaged entrypoint invoking the native test and mapping success to exit code 42.
src/tests/FunctionalTests/Android/Device_Emulator/CrashChaining/Android.Device_Emulator.CrashChaining.Test.csprojNew Android functional test project definition + env var injection.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
CopilotAI review requested due to automatic review settings March 20, 2026 15:26
@jpnurmijpnurmi changed the title [mono] Preserve signal handlers during crash chaining in mono_handle_native_crash[mono] Preserve signal handlers during crash chainingMar 20, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
@jpnurmi

Copy link
Copy Markdown
ContributorAuthor

@dotnet-policy-service agree company="Sentry"

CopilotAI review requested due to automatic review settings March 23, 2026 16:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
CopilotAI review requested due to automatic review settings March 26, 2026 15:25

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
CopilotAI review requested due to automatic review settings March 31, 2026 11:59

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 1 comment.

Comment threadsrc/tasks/AndroidAppBuilder/ApkBuilder.cs Outdated
CopilotAI review requested due to automatic review settings March 31, 2026 12:33

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 1 comment.

Comment threadsrc/mono/mono/mini/mini-posix.c
Comment threadsrc/mono/mono/mini/mini-runtime.h Outdated
jpnurmi added a commit to getsentry/sentry-native that referenced this pull request Mar 31, 2026
- Mono: chain-at-start (preload requires dotnet/runtime#125835)
- CoreCLR: preload (chain-at-start blocked by libsigchain)
- Auto-build the NDK AAR for preload tests
jpnurmi added a commit to getsentry/sentry-native that referenced this pull request Mar 31, 2026
- Mono: chain-at-start (preload requires dotnet/runtime#125835)
- CoreCLR: preload (chain-at-start blocked by libsigchain)
- Auto-build the NDK AAR for preload tests
CopilotAI review requested due to automatic review settings April 8, 2026 16:45
@jpnurmi
jpnurmiforce-pushed the fix/mono-crash-chaining branch from 23c53f4 to d7d452dCompareApril 8, 2026 16:45

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 2 comments.

Comment threadsrc/mono/mono/mini/mini-exceptions.c
Comment threadsrc/mono/mono/mini/mini-runtime.h

@lateralusXlateralusX left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thanks!

@jpnurmi

Copy link
Copy Markdown
ContributorAuthor

Hi, is there anything I can do to help land this? The CI failures all look unrelated. Happy to rebase again if that helps.

@lateralusX

Copy link
Copy Markdown
Member

Give it a rebase and I make sure to carry it through.

Expose static remove_signal_handler as mono_runtime_posix_restore_handler
and use it in mono_handle_native_crash to restore pre-Mono signal handlers
instead of resetting to SIG_DFL. The saved handlers are kept in the hash
table so that mono_chain_signal can still chain to them if needed. When
signal chaining is disabled, there are no saved handlers, so it falls back
to SIG_DFL, same as before.
Includes an Android functional test (CrashChaining) that installs pre-Mono
SIGSEGV and SIGABRT handlers and verifies they are preserved during crash
chaining.
@jpnurmi
jpnurmiforce-pushed the fix/mono-crash-chaining branch from d7d452d to 2faff44CompareApril 23, 2026 07:54
@lateralusX

Copy link
Copy Markdown
Member

This only affects Mono related sources and CoreCLR failures appears in other PR's, System.Diagnostics.Tests.ProcessWaitingTests.ProcessSafeHandle_WaitForExitOrKillOnCancellationAsync_KillsOnCancellation.

@lateralusX

Copy link
Copy Markdown
Member

/ba-g #127287

@lateralusX
lateralusX merged commit 9c95d01 into dotnet:mainApr 24, 2026
175 of 179 checks passed
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 25, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructure-monocommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jpnurmi@lateralusX
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

[mono] Restore signal handlers during crash chaining - #125835

Merged
lateralusX merged 1 commit into
dotnet:mainfrom
jpnurmi:fix/mono-crash-chaining
Apr 24, 2026
Merged

[mono] Restore signal handlers during crash chaining#125835
lateralusX merged 1 commit into
dotnet:mainfrom
jpnurmi:fix/mono-crash-chaining

Conversation

@jpnurmi

@jpnurmijpnurmi commented Mar 20, 2026

Copy link
Copy Markdown
Contributor

This change is part of the effort to fix native crash reporting for .NET Android apps (getsentry/sentry-dotnet#3954). Sentry would like to install signal handlers before Mono to capture native crashes. However, mono_handle_native_crash unconditionally resets SIGABRT, SIGILL, SIGCHLD, and SIGQUIT to SIG_DFL, even when crash_chaining is enabled, killing the process before the chained handler can run.

Expose static remove_signal_handler as mono_runtime_posix_restore_handler and use it in mono_handle_native_crash to restore pre-Mono signal handlers instead of resetting to SIG_DFL. The saved handlers are kept in the hash table so that mono_chain_signal can still chain to them if needed. When signal chaining is disabled, there are no saved handlers, so it falls back to SIG_DFL, same as before.

Includes an Android functional test (CrashChaining) that verifies signal handlers are preserved during crash chaining.

CopilotAI review requested due to automatic review settings March 20, 2026 14:59
@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Mar 20, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @akoeplinger, @matouskozak, @simonrozsival
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes Mono’s native-crash handling behavior when crash chaining is enabled so that Mono does not reset key signal handlers to SIG_DFL during mono_handle_native_crash, which can otherwise cause secondary signals (notably on Android) to terminate the process before crash chaining completes.

Changes:

  • Guard signal-handler resets in mono_handle_native_crash behind !mono_do_crash_chaining.
  • Add an Android functional test that installs a pre-Mono SIGSEGV handler, triggers a native crash, and validates SIGABRT was not reset to SIG_DFL.
  • Wire the test via the Android app template using an environment-variable gate (TEST_CRASH_CHAINING).

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

FileDescription
src/mono/mono/mini/mini-exceptions.cAvoids resetting signal handlers to defaults when crash chaining is enabled.
src/tasks/AndroidAppBuilder/Templates/monodroid.cAdds a crash-chaining functional test path (env-gated) and native test helpers.
src/tests/FunctionalTests/Android/Device_Emulator/CrashChaining/Program.csManaged entrypoint invoking the native test and mapping success to exit code 42.
src/tests/FunctionalTests/Android/Device_Emulator/CrashChaining/Android.Device_Emulator.CrashChaining.Test.csprojNew Android functional test project definition + env var injection.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
CopilotAI review requested due to automatic review settings March 20, 2026 15:26
@jpnurmijpnurmi changed the title [mono] Preserve signal handlers during crash chaining in mono_handle_native_crash[mono] Preserve signal handlers during crash chainingMar 20, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
@jpnurmi

Copy link
Copy Markdown
ContributorAuthor

@dotnet-policy-service agree company="Sentry"

CopilotAI review requested due to automatic review settings March 23, 2026 16:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
CopilotAI review requested due to automatic review settings March 26, 2026 15:25

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
CopilotAI review requested due to automatic review settings March 31, 2026 11:59

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 1 comment.

Comment threadsrc/tasks/AndroidAppBuilder/ApkBuilder.cs Outdated
CopilotAI review requested due to automatic review settings March 31, 2026 12:33

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 1 comment.

Comment threadsrc/mono/mono/mini/mini-posix.c
Comment threadsrc/mono/mono/mini/mini-runtime.h Outdated
jpnurmi added a commit to getsentry/sentry-native that referenced this pull request Mar 31, 2026
- Mono: chain-at-start (preload requires dotnet/runtime#125835)
- CoreCLR: preload (chain-at-start blocked by libsigchain)
- Auto-build the NDK AAR for preload tests
jpnurmi added a commit to getsentry/sentry-native that referenced this pull request Mar 31, 2026
- Mono: chain-at-start (preload requires dotnet/runtime#125835)
- CoreCLR: preload (chain-at-start blocked by libsigchain)
- Auto-build the NDK AAR for preload tests
CopilotAI review requested due to automatic review settings April 8, 2026 16:45
@jpnurmi
jpnurmiforce-pushed the fix/mono-crash-chaining branch from 23c53f4 to d7d452dCompareApril 8, 2026 16:45

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 2 comments.

Comment threadsrc/mono/mono/mini/mini-exceptions.c
Comment threadsrc/mono/mono/mini/mini-runtime.h

@lateralusXlateralusX left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thanks!

@jpnurmi

Copy link
Copy Markdown
ContributorAuthor

Hi, is there anything I can do to help land this? The CI failures all look unrelated. Happy to rebase again if that helps.

@lateralusX

Copy link
Copy Markdown
Member

Give it a rebase and I make sure to carry it through.

Expose static remove_signal_handler as mono_runtime_posix_restore_handler
and use it in mono_handle_native_crash to restore pre-Mono signal handlers
instead of resetting to SIG_DFL. The saved handlers are kept in the hash
table so that mono_chain_signal can still chain to them if needed. When
signal chaining is disabled, there are no saved handlers, so it falls back
to SIG_DFL, same as before.
Includes an Android functional test (CrashChaining) that installs pre-Mono
SIGSEGV and SIGABRT handlers and verifies they are preserved during crash
chaining.
@jpnurmi
jpnurmiforce-pushed the fix/mono-crash-chaining branch from d7d452d to 2faff44CompareApril 23, 2026 07:54
@lateralusX

Copy link
Copy Markdown
Member

This only affects Mono related sources and CoreCLR failures appears in other PR's, System.Diagnostics.Tests.ProcessWaitingTests.ProcessSafeHandle_WaitForExitOrKillOnCancellationAsync_KillsOnCancellation.

@lateralusX

Copy link
Copy Markdown
Member

/ba-g #127287

@lateralusX
lateralusX merged commit 9c95d01 into dotnet:mainApr 24, 2026
175 of 179 checks passed
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 25, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructure-monocommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jpnurmi@lateralusX
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[mono] Restore signal handlers during crash chaining - #125835

Merged
lateralusX merged 1 commit into
dotnet:mainfrom
jpnurmi:fix/mono-crash-chaining
Apr 24, 2026
Merged

[mono] Restore signal handlers during crash chaining#125835
lateralusX merged 1 commit into
dotnet:mainfrom
jpnurmi:fix/mono-crash-chaining

Conversation

@jpnurmi

@jpnurmijpnurmi commented Mar 20, 2026

Copy link
Copy Markdown
Contributor

This change is part of the effort to fix native crash reporting for .NET Android apps (getsentry/sentry-dotnet#3954). Sentry would like to install signal handlers before Mono to capture native crashes. However, mono_handle_native_crash unconditionally resets SIGABRT, SIGILL, SIGCHLD, and SIGQUIT to SIG_DFL, even when crash_chaining is enabled, killing the process before the chained handler can run.

Expose static remove_signal_handler as mono_runtime_posix_restore_handler and use it in mono_handle_native_crash to restore pre-Mono signal handlers instead of resetting to SIG_DFL. The saved handlers are kept in the hash table so that mono_chain_signal can still chain to them if needed. When signal chaining is disabled, there are no saved handlers, so it falls back to SIG_DFL, same as before.

Includes an Android functional test (CrashChaining) that verifies signal handlers are preserved during crash chaining.

CopilotAI review requested due to automatic review settings March 20, 2026 14:59
@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Mar 20, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @akoeplinger, @matouskozak, @simonrozsival
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes Mono’s native-crash handling behavior when crash chaining is enabled so that Mono does not reset key signal handlers to SIG_DFL during mono_handle_native_crash, which can otherwise cause secondary signals (notably on Android) to terminate the process before crash chaining completes.

Changes:

  • Guard signal-handler resets in mono_handle_native_crash behind !mono_do_crash_chaining.
  • Add an Android functional test that installs a pre-Mono SIGSEGV handler, triggers a native crash, and validates SIGABRT was not reset to SIG_DFL.
  • Wire the test via the Android app template using an environment-variable gate (TEST_CRASH_CHAINING).

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

FileDescription
src/mono/mono/mini/mini-exceptions.cAvoids resetting signal handlers to defaults when crash chaining is enabled.
src/tasks/AndroidAppBuilder/Templates/monodroid.cAdds a crash-chaining functional test path (env-gated) and native test helpers.
src/tests/FunctionalTests/Android/Device_Emulator/CrashChaining/Program.csManaged entrypoint invoking the native test and mapping success to exit code 42.
src/tests/FunctionalTests/Android/Device_Emulator/CrashChaining/Android.Device_Emulator.CrashChaining.Test.csprojNew Android functional test project definition + env var injection.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
CopilotAI review requested due to automatic review settings March 20, 2026 15:26
@jpnurmijpnurmi changed the title [mono] Preserve signal handlers during crash chaining in mono_handle_native_crash[mono] Preserve signal handlers during crash chainingMar 20, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
@jpnurmi

Copy link
Copy Markdown
ContributorAuthor

@dotnet-policy-service agree company="Sentry"

CopilotAI review requested due to automatic review settings March 23, 2026 16:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
CopilotAI review requested due to automatic review settings March 26, 2026 15:25

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
CopilotAI review requested due to automatic review settings March 31, 2026 11:59

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 1 comment.

Comment threadsrc/tasks/AndroidAppBuilder/ApkBuilder.cs Outdated
CopilotAI review requested due to automatic review settings March 31, 2026 12:33

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 1 comment.

Comment threadsrc/mono/mono/mini/mini-posix.c
Comment threadsrc/mono/mono/mini/mini-runtime.h Outdated
jpnurmi added a commit to getsentry/sentry-native that referenced this pull request Mar 31, 2026
- Mono: chain-at-start (preload requires dotnet/runtime#125835)
- CoreCLR: preload (chain-at-start blocked by libsigchain)
- Auto-build the NDK AAR for preload tests
jpnurmi added a commit to getsentry/sentry-native that referenced this pull request Mar 31, 2026
- Mono: chain-at-start (preload requires dotnet/runtime#125835)
- CoreCLR: preload (chain-at-start blocked by libsigchain)
- Auto-build the NDK AAR for preload tests
CopilotAI review requested due to automatic review settings April 8, 2026 16:45
@jpnurmi
jpnurmiforce-pushed the fix/mono-crash-chaining branch from 23c53f4 to d7d452dCompareApril 8, 2026 16:45

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 2 comments.

Comment threadsrc/mono/mono/mini/mini-exceptions.c
Comment threadsrc/mono/mono/mini/mini-runtime.h

@lateralusXlateralusX left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thanks!

@jpnurmi

Copy link
Copy Markdown
ContributorAuthor

Hi, is there anything I can do to help land this? The CI failures all look unrelated. Happy to rebase again if that helps.

@lateralusX

Copy link
Copy Markdown
Member

Give it a rebase and I make sure to carry it through.

Expose static remove_signal_handler as mono_runtime_posix_restore_handler
and use it in mono_handle_native_crash to restore pre-Mono signal handlers
instead of resetting to SIG_DFL. The saved handlers are kept in the hash
table so that mono_chain_signal can still chain to them if needed. When
signal chaining is disabled, there are no saved handlers, so it falls back
to SIG_DFL, same as before.
Includes an Android functional test (CrashChaining) that installs pre-Mono
SIGSEGV and SIGABRT handlers and verifies they are preserved during crash
chaining.
@jpnurmi
jpnurmiforce-pushed the fix/mono-crash-chaining branch from d7d452d to 2faff44CompareApril 23, 2026 07:54
@lateralusX

Copy link
Copy Markdown
Member

This only affects Mono related sources and CoreCLR failures appears in other PR's, System.Diagnostics.Tests.ProcessWaitingTests.ProcessSafeHandle_WaitForExitOrKillOnCancellationAsync_KillsOnCancellation.

@lateralusX

Copy link
Copy Markdown
Member

/ba-g #127287

@lateralusX
lateralusX merged commit 9c95d01 into dotnet:mainApr 24, 2026
175 of 179 checks passed
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 25, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructure-monocommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jpnurmi@lateralusX
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[mono] Restore signal handlers during crash chaining - #125835

Merged
lateralusX merged 1 commit into
dotnet:mainfrom
jpnurmi:fix/mono-crash-chaining
Apr 24, 2026
Merged

[mono] Restore signal handlers during crash chaining#125835
lateralusX merged 1 commit into
dotnet:mainfrom
jpnurmi:fix/mono-crash-chaining

Conversation

@jpnurmi

@jpnurmijpnurmi commented Mar 20, 2026

Copy link
Copy Markdown
Contributor

This change is part of the effort to fix native crash reporting for .NET Android apps (getsentry/sentry-dotnet#3954). Sentry would like to install signal handlers before Mono to capture native crashes. However, mono_handle_native_crash unconditionally resets SIGABRT, SIGILL, SIGCHLD, and SIGQUIT to SIG_DFL, even when crash_chaining is enabled, killing the process before the chained handler can run.

Expose static remove_signal_handler as mono_runtime_posix_restore_handler and use it in mono_handle_native_crash to restore pre-Mono signal handlers instead of resetting to SIG_DFL. The saved handlers are kept in the hash table so that mono_chain_signal can still chain to them if needed. When signal chaining is disabled, there are no saved handlers, so it falls back to SIG_DFL, same as before.

Includes an Android functional test (CrashChaining) that verifies signal handlers are preserved during crash chaining.

CopilotAI review requested due to automatic review settings March 20, 2026 14:59
@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Mar 20, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @akoeplinger, @matouskozak, @simonrozsival
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes Mono’s native-crash handling behavior when crash chaining is enabled so that Mono does not reset key signal handlers to SIG_DFL during mono_handle_native_crash, which can otherwise cause secondary signals (notably on Android) to terminate the process before crash chaining completes.

Changes:

  • Guard signal-handler resets in mono_handle_native_crash behind !mono_do_crash_chaining.
  • Add an Android functional test that installs a pre-Mono SIGSEGV handler, triggers a native crash, and validates SIGABRT was not reset to SIG_DFL.
  • Wire the test via the Android app template using an environment-variable gate (TEST_CRASH_CHAINING).

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

FileDescription
src/mono/mono/mini/mini-exceptions.cAvoids resetting signal handlers to defaults when crash chaining is enabled.
src/tasks/AndroidAppBuilder/Templates/monodroid.cAdds a crash-chaining functional test path (env-gated) and native test helpers.
src/tests/FunctionalTests/Android/Device_Emulator/CrashChaining/Program.csManaged entrypoint invoking the native test and mapping success to exit code 42.
src/tests/FunctionalTests/Android/Device_Emulator/CrashChaining/Android.Device_Emulator.CrashChaining.Test.csprojNew Android functional test project definition + env var injection.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
CopilotAI review requested due to automatic review settings March 20, 2026 15:26
@jpnurmijpnurmi changed the title [mono] Preserve signal handlers during crash chaining in mono_handle_native_crash[mono] Preserve signal handlers during crash chainingMar 20, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
@jpnurmi

Copy link
Copy Markdown
ContributorAuthor

@dotnet-policy-service agree company="Sentry"

CopilotAI review requested due to automatic review settings March 23, 2026 16:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
CopilotAI review requested due to automatic review settings March 26, 2026 15:25

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
CopilotAI review requested due to automatic review settings March 31, 2026 11:59

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 1 comment.

Comment threadsrc/tasks/AndroidAppBuilder/ApkBuilder.cs Outdated
CopilotAI review requested due to automatic review settings March 31, 2026 12:33

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 1 comment.

Comment threadsrc/mono/mono/mini/mini-posix.c
Comment threadsrc/mono/mono/mini/mini-runtime.h Outdated
jpnurmi added a commit to getsentry/sentry-native that referenced this pull request Mar 31, 2026
- Mono: chain-at-start (preload requires dotnet/runtime#125835)
- CoreCLR: preload (chain-at-start blocked by libsigchain)
- Auto-build the NDK AAR for preload tests
jpnurmi added a commit to getsentry/sentry-native that referenced this pull request Mar 31, 2026
- Mono: chain-at-start (preload requires dotnet/runtime#125835)
- CoreCLR: preload (chain-at-start blocked by libsigchain)
- Auto-build the NDK AAR for preload tests
CopilotAI review requested due to automatic review settings April 8, 2026 16:45
@jpnurmi
jpnurmiforce-pushed the fix/mono-crash-chaining branch from 23c53f4 to d7d452dCompareApril 8, 2026 16:45

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 2 comments.

Comment threadsrc/mono/mono/mini/mini-exceptions.c
Comment threadsrc/mono/mono/mini/mini-runtime.h

@lateralusXlateralusX left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thanks!

@jpnurmi

Copy link
Copy Markdown
ContributorAuthor

Hi, is there anything I can do to help land this? The CI failures all look unrelated. Happy to rebase again if that helps.

@lateralusX

Copy link
Copy Markdown
Member

Give it a rebase and I make sure to carry it through.

Expose static remove_signal_handler as mono_runtime_posix_restore_handler
and use it in mono_handle_native_crash to restore pre-Mono signal handlers
instead of resetting to SIG_DFL. The saved handlers are kept in the hash
table so that mono_chain_signal can still chain to them if needed. When
signal chaining is disabled, there are no saved handlers, so it falls back
to SIG_DFL, same as before.
Includes an Android functional test (CrashChaining) that installs pre-Mono
SIGSEGV and SIGABRT handlers and verifies they are preserved during crash
chaining.
@jpnurmi
jpnurmiforce-pushed the fix/mono-crash-chaining branch from d7d452d to 2faff44CompareApril 23, 2026 07:54
@lateralusX

Copy link
Copy Markdown
Member

This only affects Mono related sources and CoreCLR failures appears in other PR's, System.Diagnostics.Tests.ProcessWaitingTests.ProcessSafeHandle_WaitForExitOrKillOnCancellationAsync_KillsOnCancellation.

@lateralusX

Copy link
Copy Markdown
Member

/ba-g #127287

@lateralusX
lateralusX merged commit 9c95d01 into dotnet:mainApr 24, 2026
175 of 179 checks passed
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 25, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructure-monocommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jpnurmi@lateralusX
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

[mono] Restore signal handlers during crash chaining - #125835

Merged
lateralusX merged 1 commit into
dotnet:mainfrom
jpnurmi:fix/mono-crash-chaining
Apr 24, 2026
Merged

[mono] Restore signal handlers during crash chaining#125835
lateralusX merged 1 commit into
dotnet:mainfrom
jpnurmi:fix/mono-crash-chaining

Conversation

@jpnurmi

@jpnurmijpnurmi commented Mar 20, 2026

Copy link
Copy Markdown
Contributor

This change is part of the effort to fix native crash reporting for .NET Android apps (getsentry/sentry-dotnet#3954). Sentry would like to install signal handlers before Mono to capture native crashes. However, mono_handle_native_crash unconditionally resets SIGABRT, SIGILL, SIGCHLD, and SIGQUIT to SIG_DFL, even when crash_chaining is enabled, killing the process before the chained handler can run.

Expose static remove_signal_handler as mono_runtime_posix_restore_handler and use it in mono_handle_native_crash to restore pre-Mono signal handlers instead of resetting to SIG_DFL. The saved handlers are kept in the hash table so that mono_chain_signal can still chain to them if needed. When signal chaining is disabled, there are no saved handlers, so it falls back to SIG_DFL, same as before.

Includes an Android functional test (CrashChaining) that verifies signal handlers are preserved during crash chaining.

CopilotAI review requested due to automatic review settings March 20, 2026 14:59
@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Mar 20, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @akoeplinger, @matouskozak, @simonrozsival
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes Mono’s native-crash handling behavior when crash chaining is enabled so that Mono does not reset key signal handlers to SIG_DFL during mono_handle_native_crash, which can otherwise cause secondary signals (notably on Android) to terminate the process before crash chaining completes.

Changes:

  • Guard signal-handler resets in mono_handle_native_crash behind !mono_do_crash_chaining.
  • Add an Android functional test that installs a pre-Mono SIGSEGV handler, triggers a native crash, and validates SIGABRT was not reset to SIG_DFL.
  • Wire the test via the Android app template using an environment-variable gate (TEST_CRASH_CHAINING).

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

FileDescription
src/mono/mono/mini/mini-exceptions.cAvoids resetting signal handlers to defaults when crash chaining is enabled.
src/tasks/AndroidAppBuilder/Templates/monodroid.cAdds a crash-chaining functional test path (env-gated) and native test helpers.
src/tests/FunctionalTests/Android/Device_Emulator/CrashChaining/Program.csManaged entrypoint invoking the native test and mapping success to exit code 42.
src/tests/FunctionalTests/Android/Device_Emulator/CrashChaining/Android.Device_Emulator.CrashChaining.Test.csprojNew Android functional test project definition + env var injection.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
CopilotAI review requested due to automatic review settings March 20, 2026 15:26
@jpnurmijpnurmi changed the title [mono] Preserve signal handlers during crash chaining in mono_handle_native_crash[mono] Preserve signal handlers during crash chainingMar 20, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
@jpnurmi

Copy link
Copy Markdown
ContributorAuthor

@dotnet-policy-service agree company="Sentry"

CopilotAI review requested due to automatic review settings March 23, 2026 16:49

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
CopilotAI review requested due to automatic review settings March 26, 2026 15:25

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Comment threadsrc/tasks/AndroidAppBuilder/Templates/monodroid.c Outdated
CopilotAI review requested due to automatic review settings March 31, 2026 11:59

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 1 comment.

Comment threadsrc/tasks/AndroidAppBuilder/ApkBuilder.cs Outdated
CopilotAI review requested due to automatic review settings March 31, 2026 12:33

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 1 comment.

Comment threadsrc/mono/mono/mini/mini-posix.c
Comment threadsrc/mono/mono/mini/mini-runtime.h Outdated
jpnurmi added a commit to getsentry/sentry-native that referenced this pull request Mar 31, 2026
- Mono: chain-at-start (preload requires dotnet/runtime#125835)
- CoreCLR: preload (chain-at-start blocked by libsigchain)
- Auto-build the NDK AAR for preload tests
jpnurmi added a commit to getsentry/sentry-native that referenced this pull request Mar 31, 2026
- Mono: chain-at-start (preload requires dotnet/runtime#125835)
- CoreCLR: preload (chain-at-start blocked by libsigchain)
- Auto-build the NDK AAR for preload tests
CopilotAI review requested due to automatic review settings April 8, 2026 16:45
@jpnurmi
jpnurmiforce-pushed the fix/mono-crash-chaining branch from 23c53f4 to d7d452dCompareApril 8, 2026 16:45

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 10 out of 10 changed files in this pull request and generated 2 comments.

Comment threadsrc/mono/mono/mini/mini-exceptions.c
Comment threadsrc/mono/mono/mini/mini-runtime.h

@lateralusXlateralusX left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thanks!

@jpnurmi

Copy link
Copy Markdown
ContributorAuthor

Hi, is there anything I can do to help land this? The CI failures all look unrelated. Happy to rebase again if that helps.

@lateralusX

Copy link
Copy Markdown
Member

Give it a rebase and I make sure to carry it through.

Expose static remove_signal_handler as mono_runtime_posix_restore_handler
and use it in mono_handle_native_crash to restore pre-Mono signal handlers
instead of resetting to SIG_DFL. The saved handlers are kept in the hash
table so that mono_chain_signal can still chain to them if needed. When
signal chaining is disabled, there are no saved handlers, so it falls back
to SIG_DFL, same as before.
Includes an Android functional test (CrashChaining) that installs pre-Mono
SIGSEGV and SIGABRT handlers and verifies they are preserved during crash
chaining.
@jpnurmi
jpnurmiforce-pushed the fix/mono-crash-chaining branch from d7d452d to 2faff44CompareApril 23, 2026 07:54
@lateralusX

Copy link
Copy Markdown
Member

This only affects Mono related sources and CoreCLR failures appears in other PR's, System.Diagnostics.Tests.ProcessWaitingTests.ProcessSafeHandle_WaitForExitOrKillOnCancellationAsync_KillsOnCancellation.

@lateralusX

Copy link
Copy Markdown
Member

/ba-g #127287

@lateralusX
lateralusX merged commit 9c95d01 into dotnet:mainApr 24, 2026
175 of 179 checks passed
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 25, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructure-monocommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@jpnurmi@lateralusX