Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 2 additions & 7 deletions integration-test/android.Tests.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -169,13 +169,8 @@ Describe 'MAUI app (<tfm>, <configuration>)' -ForEach @(
Dump-ServerErrors -Result $result
$result.HasErrors() | Should -BeFalse
$result.Envelopes() | Should -AnyElementMatch "`"type`":`"System.NullReferenceException`""
# TODO: fix redundant SIGSEGV in Release (#3954)
if ($configuration -eq "Release") {
{ $result.Envelopes() | Should -Not -AnyElementMatch "`"type`":`"SIGSEGV`"" } | Should -Throw
} else {
$result.Envelopes() | Should -Not -AnyElementMatch "`"type`":`"SIGSEGV`""
$result.Envelopes() | Should -HaveCount 1
}
$result.Envelopes() | Should -Not -AnyElementMatch "`"type`":`"SIGSEGV`""
$result.Envelopes() | Should -HaveCount 1
}

It 'Delivers battery breadcrumbs in main thread (<configuration>)' {
Expand Down
1 change: 1 addition & 0 deletions integration-test/net9-maui/MauiProgram.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public static MauiApp CreateMauiApp()
{
#if ANDROID
options.Dsn = "{{SENTRY_DSN}}";
options.Native.SignalHandlerStrategy = Sentry.Android.SignalHandlerStrategy.ChainAtStart;
#endif
options.Debug = false;
options.DiagnosticLevel = SentryLevel.Error;
Expand Down
4 changes: 4 additions & 0 deletions src/Sentry/Platforms/Android/BindableNativeSentryOptions.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
using Sentry.Android;

// ReSharper disable once CheckNamespace
namespace Sentry;

Expand All @@ -24,6 +26,7 @@ public class NativeOptions
public bool? EnableAutoActivityLifecycleTracing { get; set; }
public bool? EnableActivityLifecycleTracingAutoFinish { get; set; }
public bool? EnableUserInteractionTracing { get; set; }
public SignalHandlerStrategy? SignalHandlerStrategy { get; set; }
public bool? AttachThreads { get; set; }
public TimeSpan? ConnectionTimeout { get; set; }
public bool? EnableNdk { get; set; }
Expand Down Expand Up @@ -66,6 +69,7 @@ public void ApplyTo(SentryOptions.NativeOptions options)
options.EnableAutoActivityLifecycleTracing = EnableAutoActivityLifecycleTracing ?? options.EnableAutoActivityLifecycleTracing;
options.EnableActivityLifecycleTracingAutoFinish = EnableActivityLifecycleTracingAutoFinish ?? options.EnableActivityLifecycleTracingAutoFinish;
options.EnableUserInteractionTracing = EnableUserInteractionTracing ?? options.EnableUserInteractionTracing;
options.SignalHandlerStrategy = SignalHandlerStrategy ?? options.SignalHandlerStrategy;
options.AttachThreads = AttachThreads ?? options.AttachThreads;
options.ConnectionTimeout = ConnectionTimeout ?? options.ConnectionTimeout;
options.EnableNdk = EnableNdk ?? options.EnableNdk;
Expand Down
9 changes: 9 additions & 0 deletions src/Sentry/Platforms/Android/NativeOptions.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
using Sentry.Android;

// ReSharper disable once CheckNamespace
namespace Sentry;

Expand Down Expand Up @@ -152,6 +154,13 @@ internal NativeOptions(SentryOptions options)
/// </remarks>
public bool EnableUserInteractionTracing { get; set; } = false;

/// <summary>
/// Gets or sets the strategy for how Sentry Native's signal handler interacts with the CLR/Mono
/// signal handler.
/// The default value is <c>SignalHandlerStrategy.Default</c> (enabled).
/// </summary>
public SignalHandlerStrategy SignalHandlerStrategy { get; set; } = SignalHandlerStrategy.Default;

// ---------- From SentryOptions.java ----------

/// <summary>
Expand Down
6 changes: 5 additions & 1 deletion src/Sentry/Platforms/Android/SentrySdk.cs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,11 @@ private static void InitSentryAndroidSdk(SentryOptions options)
o.ServerName = options.ServerName;
o.SessionTrackingIntervalMillis = (long)options.AutoSessionTrackingInterval.TotalMilliseconds;
o.ShutdownTimeoutMillis = (long)options.ShutdownTimeout.TotalMilliseconds;
o.SetNativeHandlerStrategy(JavaSdk.Android.Core.NdkHandlerStrategy.SentryHandlerStrategyDefault);
o.SetNativeHandlerStrategy(options.Native.SignalHandlerStrategy switch
{
SignalHandlerStrategy.ChainAtStart => NdkHandlerStrategy.SentryHandlerStrategyChainAtStart,
_ => NdkHandlerStrategy.SentryHandlerStrategyDefault
});

if (options.CacheDirectoryPath is { } cacheDirectoryPath)
{
Expand Down
19 changes: 19 additions & 0 deletions src/Sentry/Platforms/Android/SignalHandlerStrategy.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
namespace Sentry.Android;

/// <summary>
/// Defines how Sentry Native's signal handler interacts with the CLR/Mono
/// signal handler.
/// </summary>
public enum SignalHandlerStrategy
{
/// <summary>
/// Invokes the CLR/Mono signal handler at the end of Sentry Native's signal
/// handler.
/// </summary>
Default,
/// <summary>
/// Invokes the CLR/Mono signal handler at the start of Sentry Native's
/// signal handler.
/// </summary>
ChainAtStart
}
Loading