diff options
author | Sven Gothel <[email protected]> | 2012-06-27 02:49:18 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2012-06-27 02:49:18 +0200 |
commit | 4a0a5d69ffcb7592b092991ddb3761653c389ce6 (patch) | |
tree | 44ec0b303247523004ce5abd52b86975185a37a0 /src/newt | |
parent | 70d9ac4ac866a21a2dbcc3f779ef2b3f81a7e29d (diff) |
NEWT WindowImpl.runOnEDTIfAvail(..): Run task from current thread if owning the windowLock. Avoiding deadlock when cmds issued from within locked code path.
This allows e.g. GLEventListener::display(..) { .. glWindow.setSize(100, 100); .. }
Diffstat (limited to 'src/newt')
-rw-r--r-- | src/newt/classes/jogamp/newt/WindowImpl.java | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/newt/classes/jogamp/newt/WindowImpl.java b/src/newt/classes/jogamp/newt/WindowImpl.java index 68a2430f7..73bd9ed1c 100644 --- a/src/newt/classes/jogamp/newt/WindowImpl.java +++ b/src/newt/classes/jogamp/newt/WindowImpl.java @@ -1574,12 +1574,16 @@ public abstract class WindowImpl implements Window, NEWTEventConsumer } public void runOnEDTIfAvail(boolean wait, final Runnable task) { - Screen scrn = getScreen(); - if(null==scrn) { - throw new RuntimeException("Null screen of inner class: "+this); + if(windowLock.isOwner()) { + task.run(); + } else { + Screen scrn = getScreen(); + if(null==scrn) { + throw new RuntimeException("Null screen of inner class: "+this); + } + DisplayImpl d = (DisplayImpl) scrn.getDisplay(); + d.runOnEDTIfAvail(wait, task); } - DisplayImpl d = (DisplayImpl) scrn.getDisplay(); - d.runOnEDTIfAvail(wait, task); } private final Runnable requestFocusAction = new Runnable() { |