diff options
author | Sven Gothel <[email protected]> | 2014-06-12 21:08:21 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2014-06-12 21:08:21 +0200 |
commit | 1c5b41f01c9f31f7bd787c6b194f7939904e239b (patch) | |
tree | 55f2e21b59ae3bba390a40bb88e36076272380f6 /src/test/com/jogamp/opengl | |
parent | 5626740d14554acf7a17a73ec12b0893445832d0 (diff) |
Fix NEWT EDTUtil Deadlock on EDTUtil.start()
DisplayImpl.runOnEDTIfAvail(..) issues EDTUtil.start()
while holding it's object-lock - if the EDT is not running,
then invokes the given task.
EDTUtil.start() impl. holds it's own edt-lock
while starting, then releases it's edt-lock while issuing a null-task.
If another thread injects a blocking task right in-between
which also acquires the display's object-lock it deadlocks.
Simply remove issuing the null-task, so EDTUtil.start()
can return immediatly (releasing edt-lock)
and allowing DisplayImpl.runOnEDTIfAvail(..)
also to release it's object-lock.
The other threads task then can be executed,
where the 'starting task' would come second - which is OK,
even though a rare occasion.
Above situation was triggered via AWT/NEWT reparenting w/ forced recreation
via TestParenting01dAWT.
+++
The null-task at EDTUtil.start() was remaining code to ensure
that the EDT completed starting, which is redundant.
Diffstat (limited to 'src/test/com/jogamp/opengl')
-rw-r--r-- | src/test/com/jogamp/opengl/test/junit/newt/TestDisplayLifecycle01NEWT.java | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/test/com/jogamp/opengl/test/junit/newt/TestDisplayLifecycle01NEWT.java b/src/test/com/jogamp/opengl/test/junit/newt/TestDisplayLifecycle01NEWT.java index b007f57f3..8989f3a89 100644 --- a/src/test/com/jogamp/opengl/test/junit/newt/TestDisplayLifecycle01NEWT.java +++ b/src/test/com/jogamp/opengl/test/junit/newt/TestDisplayLifecycle01NEWT.java @@ -3,14 +3,14 @@ * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. - * + * * 2. Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. - * + * * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR @@ -20,7 +20,7 @@ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * + * * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of JogAmp Community. @@ -69,7 +69,7 @@ public class TestDisplayLifecycle01NEWT extends UITestCase { // // Create native windowing resources .. X11/Win/OSX - // + // GLWindow glWindow; if(null!=screen) { Window window = NewtFactory.createWindow(screen, caps); @@ -209,6 +209,7 @@ public class TestDisplayLifecycle01NEWT extends UITestCase { Assert.assertNotNull(edtUtil); Assert.assertEquals(false,edtUtil.isRunning()); edtUtil.start(); + Assert.assertEquals(true,edtUtil.isRunning()); edtUtil.invoke(true, null); Assert.assertEquals(true,edtUtil.isRunning()); edtUtil.invokeStop(true, null); |