8065709: Deadlock in awt/logging apparently introduced by 8019623
Reviewed-by: ant, serb
--- a/jdk/src/java.desktop/share/classes/java/awt/EventQueue.java Wed Jan 21 12:00:07 2015 -0800
+++ b/jdk/src/java.desktop/share/classes/java/awt/EventQueue.java Thu Jan 22 17:42:17 2015 +0400
@@ -182,7 +182,14 @@
private FwDispatcher fwDispatcher;
- private static final PlatformLogger eventLog = PlatformLogger.getLogger("java.awt.event.EventQueue");
+ private static volatile PlatformLogger eventLog;
+
+ private static final PlatformLogger getEventLog() {
+ if(eventLog == null) {
+ eventLog = PlatformLogger.getLogger("java.awt.event.EventQueue");
+ }
+ return eventLog;
+ }
static {
AWTAccessor.setEventQueueAccessor(
@@ -762,8 +769,8 @@
dispatchThread.stopDispatching();
}
} else {
- if (eventLog.isLoggable(PlatformLogger.Level.FINE)) {
- eventLog.fine("Unable to dispatch event: " + event);
+ if (getEventLog().isLoggable(PlatformLogger.Level.FINE)) {
+ getEventLog().fine("Unable to dispatch event: " + event);
}
}
}
@@ -860,8 +867,8 @@
* @since 1.2
*/
public void push(EventQueue newEventQueue) {
- if (eventLog.isLoggable(PlatformLogger.Level.FINE)) {
- eventLog.fine("EventQueue.push(" + newEventQueue + ")");
+ if (getEventLog().isLoggable(PlatformLogger.Level.FINE)) {
+ getEventLog().fine("EventQueue.push(" + newEventQueue + ")");
}
pushPopLock.lock();
@@ -886,8 +893,8 @@
// Use getNextEventPrivate() as it doesn't call flushPendingEvents()
newEventQueue.postEventPrivate(topQueue.getNextEventPrivate());
} catch (InterruptedException ie) {
- if (eventLog.isLoggable(PlatformLogger.Level.FINE)) {
- eventLog.fine("Interrupted push", ie);
+ if (getEventLog().isLoggable(PlatformLogger.Level.FINE)) {
+ getEventLog().fine("Interrupted push", ie);
}
}
}
@@ -925,8 +932,8 @@
* @since 1.2
*/
protected void pop() throws EmptyStackException {
- if (eventLog.isLoggable(PlatformLogger.Level.FINE)) {
- eventLog.fine("EventQueue.pop(" + this + ")");
+ if (getEventLog().isLoggable(PlatformLogger.Level.FINE)) {
+ getEventLog().fine("EventQueue.pop(" + this + ")");
}
pushPopLock.lock();
@@ -948,8 +955,8 @@
try {
prevQueue.postEventPrivate(topQueue.getNextEventPrivate());
} catch (InterruptedException ie) {
- if (eventLog.isLoggable(PlatformLogger.Level.FINE)) {
- eventLog.fine("Interrupted pop", ie);
+ if (getEventLog().isLoggable(PlatformLogger.Level.FINE)) {
+ getEventLog().fine("Interrupted pop", ie);
}
}
}