mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1066175 - Use other means to handle uncaught exception when Gecko is unavailable; r=snorp
When the Gecko crash reporter is unavailable, uncaught Java exceptions can end up being ignored. We should try more ways to handle the exception.
This commit is contained in:
parent
44773977b0
commit
11a68eae9d
@ -131,6 +131,7 @@ public class GeckoAppShell
|
|||||||
// We have static members only.
|
// We have static members only.
|
||||||
private GeckoAppShell() { }
|
private GeckoAppShell() { }
|
||||||
|
|
||||||
|
private static Thread.UncaughtExceptionHandler systemUncaughtHandler;
|
||||||
private static boolean restartScheduled;
|
private static boolean restartScheduled;
|
||||||
private static GeckoEditableListener editableListener;
|
private static GeckoEditableListener editableListener;
|
||||||
|
|
||||||
@ -210,6 +211,8 @@ public class GeckoAppShell
|
|||||||
public static native void dispatchMemoryPressure();
|
public static native void dispatchMemoryPressure();
|
||||||
|
|
||||||
public static void registerGlobalExceptionHandler() {
|
public static void registerGlobalExceptionHandler() {
|
||||||
|
systemUncaughtHandler = Thread.getDefaultUncaughtExceptionHandler();
|
||||||
|
|
||||||
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
|
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void uncaughtException(Thread thread, Throwable e) {
|
public void uncaughtException(Thread thread, Throwable e) {
|
||||||
@ -484,8 +487,19 @@ public class GeckoAppShell
|
|||||||
// shutdown
|
// shutdown
|
||||||
editor.commit();
|
editor.commit();
|
||||||
}
|
}
|
||||||
} finally {
|
} catch (final Throwable exc) {
|
||||||
|
// Report the Java crash below, even if we encounter an exception here.
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
reportJavaCrash(getStackTraceString(e));
|
reportJavaCrash(getStackTraceString(e));
|
||||||
|
} finally {
|
||||||
|
// reportJavaCrash should have caused us to hard crash. If we're still here,
|
||||||
|
// it probably means Gecko is not loaded, and we should do something else.
|
||||||
|
// Bring up the app crashed dialog so we don't crash silently.
|
||||||
|
if (systemUncaughtHandler != null) {
|
||||||
|
systemUncaughtHandler.uncaughtException(thread, e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user