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.
Fix Bug 826 Regression caused by commit 41190c3830157abdf9649cbf7767e57108f55075 (Bug 975)
Commit 41190c3830157abdf9649cbf7767e57108f55075, fix for 'Bug 975 GLJPanel's OffscreenDrawable double swap', caused a regression of commit c427ed22244df44b71a0f1f000b0f93e56c283c2, fix for 'Bug 826: GLJPanel: Fully restore TextureState and Viewport'.
Commit 41190c3830157abdf9649cbf7767e57108f55075 issues offscreenDrawable.swapBuffers() and hence modifying the texture unit settings before saving the TextureState, the whole purpose of commit c427ed22244df44b71a0f1f000b0f93e56c283c2.