Skip to content

Commit

Permalink
[WIP] Use mono_unhandled_exception for NET6
Browse files Browse the repository at this point in the history
  • Loading branch information
grendello committed Jul 20, 2021
1 parent 21751b5 commit d933d43
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 1 deletion.
15 changes: 14 additions & 1 deletion src/Mono.Android/Android.Runtime/JNIEnv.cs
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,9 @@ static void ManualJavaObjectDispose (Java.Lang.Object obj)
}

static Action<Exception> mono_unhandled_exception = null!;
#if !NETCOREAPP
static Action<AppDomain, UnhandledExceptionEventArgs> AppDomain_DoUnhandledException = null!;
#endif

static void Initialize ()
{
Expand All @@ -253,6 +255,7 @@ static void Initialize ()
mono_unhandled_exception = (Action<Exception>) Delegate.CreateDelegate (typeof(Action<Exception>), mono_UnhandledException);
}

#if !NETCOREAPP
if (AppDomain_DoUnhandledException == null) {
var ad_due = typeof (AppDomain)
.GetMethod ("DoUnhandledException",
Expand All @@ -265,8 +268,14 @@ static void Initialize ()
typeof (Action<AppDomain, UnhandledExceptionEventArgs>), ad_due);
}
}
#endif
}

#if NETCOREAPP
[DllImport (AndroidRuntime.InternalDllName, CallingConvention = CallingConvention.Cdecl)]
extern static void monodroid_unhandled_exception (Exception javaException);
#endif

internal static void PropagateUncaughtException (IntPtr env, IntPtr javaThreadPtr, IntPtr javaExceptionPtr)
{
if (!PropagateExceptions)
Expand All @@ -287,14 +296,18 @@ internal static void PropagateUncaughtException (IntPtr env, IntPtr javaThreadPt
try {
var jltp = javaException as JavaProxyThrowable;
Exception? innerException = jltp?.InnerException;
var args = new UnhandledExceptionEventArgs (innerException ?? javaException, isTerminating: true);

Logger.Log (LogLevel.Info, "MonoDroid", "UNHANDLED EXCEPTION:");
Logger.Log (LogLevel.Info, "MonoDroid", javaException.ToString ());

#if !NETCOREAPP
var args = new UnhandledExceptionEventArgs (innerException ?? javaException, isTerminating: true);
// Disabled until Linker error surfaced in https://github.com/xamarin/xamarin-android/pull/4302#issuecomment-596400025 is resolved
//AppDomain.CurrentDomain.DoUnhandledException (args);
AppDomain_DoUnhandledException?.Invoke (AppDomain.CurrentDomain, args);
#else
monodroid_unhandled_exception (innerException ?? javaException);
#endif
} catch (Exception e) {
Logger.Log (LogLevel.Error, "monodroid", "Exception thrown while raising AppDomain.UnhandledException event: " + e.ToString ());
}
Expand Down
5 changes: 5 additions & 0 deletions src/monodroid/jni/monodroid-glue-internal.hh
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,11 @@ namespace xamarin::android::internal
}

#if defined (NET6)
void unhandled_exception (MonoObject *java_exception)
{
mono_unhandled_exception (java_exception);
}

void propagate_uncaught_exception (JNIEnv *env, jobject javaThread, jthrowable javaException);
#else // def NET6
void propagate_uncaught_exception (MonoDomain *domain, JNIEnv *env, jobject javaThread, jthrowable javaException);
Expand Down
7 changes: 7 additions & 0 deletions src/monodroid/jni/pinvoke-override-api.cc
Original file line number Diff line number Diff line change
Expand Up @@ -345,6 +345,12 @@ monodroid_get_dylib (void)
return nullptr;
}

static void
monodroid_unhandled_exception (MonoObject *java_exception)
{
monodroidRuntime.unhandled_exception (java_exception);
}

#define PINVOKE_SYMBOL(_sym_) { #_sym_, reinterpret_cast<void*>(&_sym_) }

MonodroidRuntime::pinvoke_api_map MonodroidRuntime::xa_pinvoke_map = {
Expand Down Expand Up @@ -583,6 +589,7 @@ MonodroidRuntime::pinvoke_api_map MonodroidRuntime::xa_pinvoke_map = {
PINVOKE_SYMBOL (recv_uninterrupted),
PINVOKE_SYMBOL (send_uninterrupted),
PINVOKE_SYMBOL (set_world_accessable),
PINVOKE_SYMBOL (monodroid_unhandled_exception),
};

MonodroidRuntime::pinvoke_library_map MonodroidRuntime::other_pinvoke_map (MonodroidRuntime::LIBRARY_MAP_INITIAL_BUCKET_COUNT);
Expand Down

0 comments on commit d933d43

Please sign in to comment.