From c68eb97834202e6855d2e6e4a7c8de35326a208f Mon Sep 17 00:00:00 2001 From: Mischan Toosarani-Hausberger Date: Thu, 22 Jan 2026 14:18:59 +0100 Subject: [PATCH 1/3] fix: add tombstone exception mechanism --- .../tombstone/NativeExceptionMechanism.java | 21 +++++++++++++++++++ .../internal/tombstone/TombstoneParser.java | 4 +--- .../internal/tombstone/TombstoneParserTest.kt | 2 +- 3 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 sentry-android-core/src/main/java/io/sentry/android/core/internal/tombstone/NativeExceptionMechanism.java diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/internal/tombstone/NativeExceptionMechanism.java b/sentry-android-core/src/main/java/io/sentry/android/core/internal/tombstone/NativeExceptionMechanism.java new file mode 100644 index 0000000000..1b4bd702c6 --- /dev/null +++ b/sentry-android-core/src/main/java/io/sentry/android/core/internal/tombstone/NativeExceptionMechanism.java @@ -0,0 +1,21 @@ +package io.sentry.android.core.internal.tombstone; + +import androidx.annotation.NonNull; + +/** Mechanism types for native crashes. */ +public enum NativeExceptionMechanism { + TOMBSTONE("tombstone"), + SIGNAL_HANDLER("signalhandler"), + TOMBSTONE_MERGED("tombstone_merged"); + + private final @NonNull String value; + + NativeExceptionMechanism(@NonNull final String value) { + this.value = value; + } + + @NonNull + public String getValue() { + return value; + } +} diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/internal/tombstone/TombstoneParser.java b/sentry-android-core/src/main/java/io/sentry/android/core/internal/tombstone/TombstoneParser.java index 18ad8ec825..18c10fac44 100644 --- a/sentry-android-core/src/main/java/io/sentry/android/core/internal/tombstone/TombstoneParser.java +++ b/sentry-android-core/src/main/java/io/sentry/android/core/internal/tombstone/TombstoneParser.java @@ -142,9 +142,7 @@ private static Mechanism createMechanismFromSignalInfo( @NonNull final TombstoneProtos.Signal signalInfo) { final Mechanism mechanism = new Mechanism(); - // this follows the current processing triggers strictly, changing any of these - // alters grouping and name (long-term we might want to have a tombstone mechanism) - mechanism.setType("signalhandler"); + mechanism.setType(NativeExceptionMechanism.TOMBSTONE.getValue()); mechanism.setHandled(false); mechanism.setSynthetic(true); diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/internal/tombstone/TombstoneParserTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/internal/tombstone/TombstoneParserTest.kt index efb1e963a1..cbd07f0005 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/internal/tombstone/TombstoneParserTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/internal/tombstone/TombstoneParserTest.kt @@ -72,7 +72,7 @@ class TombstoneParserTest { assertNotNull(crashedThreadId) val mechanism = exception.mechanism - assertEquals("signalhandler", mechanism!!.type) + assertEquals("tombstone", mechanism!!.type) assertEquals(false, mechanism.isHandled) assertEquals(true, mechanism.synthetic) assertEquals("SIGSEGV", mechanism.meta!!["name"]) From 0082e7d485d70eb9c1a005b34d3ea89c9399cb68 Mon Sep 17 00:00:00 2001 From: Mischan Toosarani-Hausberger Date: Thu, 22 Jan 2026 14:23:31 +0100 Subject: [PATCH 2/3] add changelog --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 743f2f1776..7c80da8d9e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## Unreleased + +### Internal + +- Establish new native exception mechanisms to differentiate events generated by `sentry-native` from `ApplicationExitInfo`. ([#5052](https://github.com/getsentry/sentry-java/pull/5052)) + ## 8.31.0 ### Features From 1ffaa057ec764be37f5dae60890df2e03a248377 Mon Sep 17 00:00:00 2001 From: Mischan Toosarani-Hausberger Date: Fri, 23 Jan 2026 19:36:03 +0100 Subject: [PATCH 3/3] switch the tombstone mechanisms from snake to pascal case. --- .../core/internal/tombstone/NativeExceptionMechanism.java | 4 ++-- .../android/core/internal/tombstone/TombstoneParserTest.kt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/internal/tombstone/NativeExceptionMechanism.java b/sentry-android-core/src/main/java/io/sentry/android/core/internal/tombstone/NativeExceptionMechanism.java index 1b4bd702c6..2dad712b19 100644 --- a/sentry-android-core/src/main/java/io/sentry/android/core/internal/tombstone/NativeExceptionMechanism.java +++ b/sentry-android-core/src/main/java/io/sentry/android/core/internal/tombstone/NativeExceptionMechanism.java @@ -4,9 +4,9 @@ /** Mechanism types for native crashes. */ public enum NativeExceptionMechanism { - TOMBSTONE("tombstone"), + TOMBSTONE("Tombstone"), SIGNAL_HANDLER("signalhandler"), - TOMBSTONE_MERGED("tombstone_merged"); + TOMBSTONE_MERGED("TombstoneMerged"); private final @NonNull String value; diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/internal/tombstone/TombstoneParserTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/internal/tombstone/TombstoneParserTest.kt index cbd07f0005..954ad0eccc 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/internal/tombstone/TombstoneParserTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/internal/tombstone/TombstoneParserTest.kt @@ -72,7 +72,7 @@ class TombstoneParserTest { assertNotNull(crashedThreadId) val mechanism = exception.mechanism - assertEquals("tombstone", mechanism!!.type) + assertEquals("Tombstone", mechanism!!.type) assertEquals(false, mechanism.isHandled) assertEquals(true, mechanism.synthetic) assertEquals("SIGSEGV", mechanism.meta!!["name"])