Add a timed check for GL Crash. Really a last resort.
This commit is contained in:
parent
b82be4fc02
commit
22ee569d32
@ -76,7 +76,7 @@ public class OpenGLUtils {
|
|||||||
* exitDangerZone is not called after this the 3D user preference will be
|
* exitDangerZone is not called after this the 3D user preference will be
|
||||||
* disabled at the next startup.
|
* disabled at the next startup.
|
||||||
*/
|
*/
|
||||||
static void enterDangerZone(String where) {
|
static void enterDangerZone(final String where) {
|
||||||
log.verbose("Entering GL DangerZone: " + where);
|
log.verbose("Entering GL DangerZone: " + where);
|
||||||
inTheDangerZone = true;
|
inTheDangerZone = true;
|
||||||
Application.getPreferences().set3dEnabled(false);
|
Application.getPreferences().set3dEnabled(false);
|
||||||
@ -93,7 +93,7 @@ public class OpenGLUtils {
|
|||||||
*
|
*
|
||||||
* Safe to call when not in the danger-zone. Safe to call quite often
|
* Safe to call when not in the danger-zone. Safe to call quite often
|
||||||
*/
|
*/
|
||||||
static void exitDangerZone(String where) {
|
static void exitDangerZone(final String where) {
|
||||||
if (!inTheDangerZone)
|
if (!inTheDangerZone)
|
||||||
return;
|
return;
|
||||||
inTheDangerZone = false;
|
inTheDangerZone = false;
|
||||||
@ -106,6 +106,38 @@ public class OpenGLUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enter a DangerZone for a set amount of time. If the app crashes before
|
||||||
|
* expiration, disable 3D.
|
||||||
|
*
|
||||||
|
* @param where
|
||||||
|
* @param milliseconds
|
||||||
|
*/
|
||||||
|
static void timedDangerZone(final String where, final long milliseconds){
|
||||||
|
enterDangerZone(where + " - timed");
|
||||||
|
final Thread onShutdown = new Thread(){
|
||||||
|
@Override
|
||||||
|
public void run(){
|
||||||
|
exitDangerZone(where + " - shutdown hook");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Runtime.getRuntime().addShutdownHook(onShutdown);
|
||||||
|
new Thread(){
|
||||||
|
@Override
|
||||||
|
public void run(){
|
||||||
|
try {
|
||||||
|
Thread.sleep(milliseconds);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
log.warn("timedDangerZone sleep interrupted.");
|
||||||
|
} finally {
|
||||||
|
exitDangerZone(where + " - time expired");
|
||||||
|
Runtime.getRuntime().removeShutdownHook(onShutdown);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.start();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Seriously never call this it will segfault the JVM.
|
* Seriously never call this it will segfault the JVM.
|
||||||
@Deprecated
|
@Deprecated
|
||||||
|
@ -176,6 +176,7 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
|
|||||||
} finally {
|
} finally {
|
||||||
OpenGLUtils.exitDangerZone("initGLCanvas");
|
OpenGLUtils.exitDangerZone("initGLCanvas");
|
||||||
}
|
}
|
||||||
|
OpenGLUtils.timedDangerZone("after initGLCanvas", 5000);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user