Merge
This commit is contained in:
commit
48b8b9464b
@ -663,13 +663,15 @@ public class AppletClassLoader extends URLClassLoader {
|
||||
// set the context class loader to the AppletClassLoader.
|
||||
creatorThread.setContextClassLoader(AppletClassLoader.this);
|
||||
|
||||
synchronized(creatorThread.syncObject) {
|
||||
creatorThread.start();
|
||||
try {
|
||||
creatorThread.syncObject.wait();
|
||||
} catch (InterruptedException e) { }
|
||||
appContext = creatorThread.appContext;
|
||||
}
|
||||
creatorThread.start();
|
||||
try {
|
||||
synchronized(creatorThread.syncObject) {
|
||||
while (!creatorThread.created) {
|
||||
creatorThread.syncObject.wait();
|
||||
}
|
||||
}
|
||||
} catch (InterruptedException e) { }
|
||||
appContext = creatorThread.appContext;
|
||||
return null;
|
||||
}
|
||||
});
|
||||
@ -854,14 +856,16 @@ public void grab() {
|
||||
class AppContextCreator extends Thread {
|
||||
Object syncObject = new Object();
|
||||
AppContext appContext = null;
|
||||
volatile boolean created = false;
|
||||
|
||||
AppContextCreator(ThreadGroup group) {
|
||||
super(group, "AppContextCreator");
|
||||
}
|
||||
|
||||
public void run() {
|
||||
synchronized(syncObject) {
|
||||
appContext = SunToolkit.createNewAppContext();
|
||||
appContext = SunToolkit.createNewAppContext();
|
||||
created = true;
|
||||
synchronized(syncObject) {
|
||||
syncObject.notifyAll();
|
||||
}
|
||||
} // run()
|
||||
|
@ -696,7 +696,9 @@ public abstract class SunToolkit extends Toolkit
|
||||
|
||||
synchronized (lock) {
|
||||
executeOnEventHandlerThread(event);
|
||||
lock.wait();
|
||||
while(!event.isDispatched()) {
|
||||
lock.wait();
|
||||
}
|
||||
}
|
||||
|
||||
Throwable eventThrowable = event.getThrowable();
|
||||
|
@ -228,31 +228,29 @@ public class WToolkit extends SunToolkit implements Runnable {
|
||||
|
||||
sun.java2d.Disposer.addRecord(anchor, new ToolkitDisposer());
|
||||
|
||||
synchronized (this) {
|
||||
// Fix for bug #4046430 -- Race condition
|
||||
// where notifyAll can be called before
|
||||
// the "AWT-Windows" thread's parent thread is
|
||||
// waiting, resulting in a deadlock on startup.
|
||||
/*
|
||||
* Fix for 4701990.
|
||||
* AWTAutoShutdown state must be changed before the toolkit thread
|
||||
* starts to avoid race condition.
|
||||
*/
|
||||
AWTAutoShutdown.notifyToolkitThreadBusy();
|
||||
|
||||
/*
|
||||
* Fix for 4701990.
|
||||
* AWTAutoShutdown state must be changed before the toolkit thread
|
||||
* starts to avoid race condition.
|
||||
*/
|
||||
AWTAutoShutdown.notifyToolkitThreadBusy();
|
||||
|
||||
if (!startToolkitThread(this)) {
|
||||
Thread toolkitThread = new Thread(this, "AWT-Windows");
|
||||
toolkitThread.setDaemon(true);
|
||||
toolkitThread.start();
|
||||
}
|
||||
|
||||
try {
|
||||
wait();
|
||||
}
|
||||
catch (InterruptedException x) {
|
||||
}
|
||||
if (!startToolkitThread(this)) {
|
||||
Thread toolkitThread = new Thread(this, "AWT-Windows");
|
||||
toolkitThread.setDaemon(true);
|
||||
toolkitThread.start();
|
||||
}
|
||||
|
||||
try {
|
||||
synchronized(this) {
|
||||
while(!inited) {
|
||||
wait();
|
||||
}
|
||||
}
|
||||
} catch (InterruptedException x) {
|
||||
// swallow the exception
|
||||
}
|
||||
|
||||
SunToolkit.setDataTransfererClassName(DATA_TRANSFERER_CLASS_NAME);
|
||||
|
||||
// Enabled "live resizing" by default. It remains controlled
|
||||
@ -265,33 +263,38 @@ public class WToolkit extends SunToolkit implements Runnable {
|
||||
setExtraMouseButtonsEnabledNative(areExtraMouseButtonsEnabled);
|
||||
}
|
||||
|
||||
private final void registerShutdownHook() {
|
||||
AccessController.doPrivileged(new PrivilegedAction() {
|
||||
public Object run() {
|
||||
ThreadGroup currentTG =
|
||||
Thread.currentThread().getThreadGroup();
|
||||
ThreadGroup parentTG = currentTG.getParent();
|
||||
while (parentTG != null) {
|
||||
currentTG = parentTG;
|
||||
parentTG = currentTG.getParent();
|
||||
}
|
||||
Thread shutdown = new Thread(currentTG, new Runnable() {
|
||||
public void run() {
|
||||
shutdown();
|
||||
}
|
||||
});
|
||||
shutdown.setContextClassLoader(null);
|
||||
Runtime.getRuntime().addShutdownHook(shutdown);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void run() {
|
||||
Thread.currentThread().setPriority(Thread.NORM_PRIORITY+1);
|
||||
boolean startPump = init();
|
||||
|
||||
if (startPump) {
|
||||
AccessController.doPrivileged(new PrivilegedAction() {
|
||||
public Object run() {
|
||||
ThreadGroup currentTG =
|
||||
Thread.currentThread().getThreadGroup();
|
||||
ThreadGroup parentTG = currentTG.getParent();
|
||||
while (parentTG != null) {
|
||||
currentTG = parentTG;
|
||||
parentTG = currentTG.getParent();
|
||||
}
|
||||
Thread shutdown = new Thread(currentTG, new Runnable() {
|
||||
public void run() {
|
||||
shutdown();
|
||||
}
|
||||
});
|
||||
shutdown.setContextClassLoader(null);
|
||||
Runtime.getRuntime().addShutdownHook(shutdown);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
registerShutdownHook();
|
||||
}
|
||||
|
||||
synchronized(this) {
|
||||
inited = true;
|
||||
notifyAll();
|
||||
}
|
||||
|
||||
@ -309,6 +312,8 @@ public class WToolkit extends SunToolkit implements Runnable {
|
||||
* eventLoop() should Dispose the toolkit and exit.
|
||||
*/
|
||||
private native boolean init();
|
||||
private boolean inited = false;
|
||||
|
||||
private native void eventLoop();
|
||||
private native void shutdown();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user