提交 b3dee5cd 编写于 作者: A alitvinov

8130735: javax.swing.TimerQueue: timer fires late when another timer starts

Reviewed-by: ssadetsky, alexsch
上级 efd214cb
......@@ -93,6 +93,9 @@ class TimerQueue implements Runnable
void startIfNeeded() {
if (! running) {
runningLock.lock();
if (running) {
return;
}
try {
final ThreadGroup threadGroup =
AppContext.getAppContext().getThreadGroup();
......@@ -168,15 +171,17 @@ class TimerQueue implements Runnable
try {
while (running) {
try {
Timer timer = queue.take().getTimer();
DelayedTimer runningTimer = queue.take();
Timer timer = runningTimer.getTimer();
timer.getLock().lock();
try {
DelayedTimer delayedTimer = timer.delayedTimer;
if (delayedTimer != null) {
if (delayedTimer == runningTimer) {
/*
* Timer is not removed after we get it from
* the queue and before the lock on the timer is
* acquired
* Timer is not removed (delayedTimer != null)
* or not removed and added (runningTimer == delayedTimer)
* after we get it from the queue and before the
* lock on the timer is acquired
*/
timer.post(); // have timer post an event
timer.delayedTimer = null;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册