From 5b1120f2bd11165e6c5f14208a8f53a31f1b2ea3 Mon Sep 17 00:00:00 2001 From: kevinw Date: Tue, 21 Dec 2010 11:32:34 +0000 Subject: [PATCH] 6968933: Clip loop() deadlock in DirectAudioDevice$DirectClip.run Reviewed-by: amenkov --- .../classes/com/sun/media/sound/DirectAudioDevice.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/share/classes/com/sun/media/sound/DirectAudioDevice.java b/src/share/classes/com/sun/media/sound/DirectAudioDevice.java index 127e7f35c..57c80856f 100644 --- a/src/share/classes/com/sun/media/sound/DirectAudioDevice.java +++ b/src/share/classes/com/sun/media/sound/DirectAudioDevice.java @@ -1393,8 +1393,11 @@ class DirectAudioDevice extends AbstractMixer { public void run() { if (Printer.trace) Printer.trace(">>> DirectClip: run() threadID="+Thread.currentThread().getId()); while (thread != null) { - if (!doIO) { - synchronized(lock) { + // doIO is volatile, but we could check it, then get + // pre-empted while another thread changes doIO and notifies, + // before we wait (so we sleep in wait forever). + synchronized(lock) { + if (!doIO) { try { lock.wait(); } catch(InterruptedException ie) {} -- GitLab