Commit 605d10f7 by Fernando Nasser Committed by Fernando Nasser

EventQueue.java (pop): Prevent racing condition to add events to the queue out…

EventQueue.java (pop): Prevent racing condition to add events to the queue out of order by acquiring...

        * java/awt/EventQueue.java (pop): Prevent racing condition to add
        events to the queue out of order by acquiring locks in the proper
        order and not by releasing one before acquiring the other.

From-SVN: r76161
parent 8f9f8d71
2004-01-19 Fernando Nasser <fnasser@redhat.com> 2004-01-19 Fernando Nasser <fnasser@redhat.com>
* java/awt/EventQueue.java (pop): Prevent racing condition to add
events to the queue out of order by acquiring locks in the proper
order and not by releasing one before acquiring the other.
2004-01-19 Fernando Nasser <fnasser@redhat.com>
* gnu/java/awt/peer/gtk/TestAWT.java (DialogWindow): Make text not * gnu/java/awt/peer/gtk/TestAWT.java (DialogWindow): Make text not
visible so that dialog can be reused. visible so that dialog can be reused.
......
...@@ -358,14 +358,15 @@ public class EventQueue ...@@ -358,14 +358,15 @@ public class EventQueue
if (prev == null) if (prev == null)
throw new EmptyStackException(); throw new EmptyStackException();
// Don't synchronize both this and prev at the same time, or deadlock could /* The order is important here, we must get the prev lock first,
// occur. or deadlock could occur as callers usually get here following
prev's next pointer, and thus obtain prev's lock before trying
to get this lock. */
synchronized (prev) synchronized (prev)
{ {
prev.next = next; prev.next = next;
if (next != null) if (next != null)
next.prev = prev; next.prev = prev;
}
synchronized (this) synchronized (this)
{ {
...@@ -386,6 +387,7 @@ public class EventQueue ...@@ -386,6 +387,7 @@ public class EventQueue
dispatchThread = null; dispatchThread = null;
} }
} }
}
/** /**
* Dispatches an event. The manner in which the event is dispatched depends * Dispatches an event. The manner in which the event is dispatched depends
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment