Summary: | NewtCanvasAWT XEventsQueued crash during reparent of undecorated fullscreen window | ||
---|---|---|---|
Product: | [JogAmp] Newt | Reporter: | Xerxes Rånby <xerxes> |
Component: | x11 | Assignee: | Sven Gothel <sgothel> |
Status: | RESOLVED FIXED | ||
Severity: | enhancement | ||
Priority: | --- | ||
Version: | 1 | ||
Hardware: | All | ||
OS: | all | ||
Type: | --- | SCM Refs: |
008366fd591c9fce31e7185528b606a8205a38f8
c9fcc8cd510abc0cbebb872dc3e457327655e778
b4e03a5168f62223369a483924eb2491250c6f95
0e1b4bf1b17b10933c3ccdfea5cef7eca6aad2fb
9b2bbaf82ed410096ac279542357daefc0d6dc7f
e217858a83f947ffdd7e4ce3395073584e57108a
0f1ddc82329835b903e31e301fcf134d1d7337be
c8726ef04b94ad8e66e1191a06ff793b908d130c
ded0a8fb68067e3dbb42ff4f6fce315a237afa8f
|
Workaround: | TRUE | ||
Attachments: |
NewtCanvasAWT-XEventsQueued-debug-crash-log.txt
hs_err_pid13015.log |
Description
Xerxes Rånby
2013-12-13 14:57:48 CET
Created attachment 569 [details]
hs_err_pid13015.log
Some runs triggers an Nativewindow X11 IOError exception "Resource temporary unavailable" instead of crashing. ... LAutoDrawableBase.sizeChanged: (NetxPanelThread@http://jogamp.org/deployment/archive/master/gluegen_753-joal_504-jogl_1170-jocl_887-signed/jogl-applet-runner-newt-gears-normal-napplet.html-Display-.x11_:0-1-EDT-3): 1920x1080 - surfaceHandle 0x5c00002 Window.focusAction() START - NetxPanelThread@http://jogamp.org/deployment/archive/master/gluegen_753-joal_504-jogl_1170-jocl_887-signed/jogl-applet-runner-newt-gears-normal-napplet.html-Display-.x11_:0-1-EDT-3, focusAction: com.jogamp.newt.awt.NewtCanvasAWT$FocusAction@13ac7b2 - windowHandle 0x5c00002 NewtCanvasAWT.FocusAction: NetxPanelThread@http://jogamp.org/deployment/archive/master/gluegen_753-joal_504-jogl_1170-jocl_887-signed/jogl-applet-runner-newt-gears-normal-napplet.html-Display-.x11_:0-1-EDT-3, isOnscreen true, hasFocus false, isParent true, isFS false Window.focusAction() END - NetxPanelThread@http://jogamp.org/deployment/archive/master/gluegen_753-joal_504-jogl_1170-jocl_887-signed/jogl-applet-runner-newt-gears-normal-napplet.html-Display-.x11_:0-1-EDT-3, focusAction: com.jogamp.newt.awt.NewtCanvasAWT$FocusAction@13ac7b2 - windowHandle 0x5c00002, res: false Window.RequestFocusInt: forcing - (NetxPanelThread@http://jogamp.org/deployment/archive/master/gluegen_753-joal_504-jogl_1170-jocl_887-signed/jogl-applet-runner-newt-gears-normal-napplet.html-Display-.x11_:0-1-EDT-3): skipFocusAction false, focus true -> true - windowHandle 0x5c00002 parentWindowHandle 0x4e00022 Window.reparent: END-X (NetxPanelThread@http://jogamp.org/deployment/archive/master/gluegen_753-joal_504-jogl_1170-jocl_887-signed/jogl-applet-runner-newt-gears-normal-napplet.html-Display-.x11_:0-1-EDT-2) windowHandle 0x5c00002, visible: true, parentWindowHandle 0x4e00022, parentWindow 27807950 32/32 1920x1080 consumeKeyEvent(usr): KeyEvent[EVENT_KEY_PRESSED, code 0x52, sym 0x52, char 'r' (0x72), printable true, modifier false, action false, InputEvent[modifiers: [], NEWTEvent[source:jogamp.newt.driver.x11.WindowDriver, consumed false, when:1386942403611 d 1448ms]]], consumed: false Nativewindow X11 IOError: Display 0x9cd07c8 (:0): Resursen tillfälligt otillgänglig Nativewindow X11 IOError: Display 0x9cd07c8 (:0): Resursen tillfälligt otillgänglig FATAL ERROR in native method: Nativewindow X11 IOError: Display 0x9cd07c8 (:0): Resursen tillfälligt otillgänglig at jogamp.newt.driver.x11.DisplayDriver.DispatchMessages0(Native Method) at jogamp.newt.driver.x11.DisplayDriver.dispatchMessagesNative(DisplayDriver.java:107) at jogamp.newt.DisplayImpl.dispatchMessages(DisplayImpl.java:540) at jogamp.newt.DisplayImpl$5.run(DisplayImpl.java:463) at jogamp.newt.DefaultEDTUtil$NEDT.run(DefaultEDTUtil.java:326) #This bug is still reproducible using 2.1.3 _JAVA_OPTIONS="-Dnativewindow.debug=all -Djogl.debug=all -Dnewt.debug=all" firefox http://jogamp.org/deployment/jogamp-current/jogl-applet-runner-newt-gears-normal-napplet.html press the keys in the following order: f d r r -> crash Reading symbols from /tmp/jogamp_0000/file_cache/jln2887950668522298898 /jln9052652992330954465/libnewt.so...(no debugging symbols found)...done. Need to recompile the jogamp natives with debug symbols enabled in order to produce a gdb backtrace. Cannot reproduce on Debian Jessie, 64bit, X11+NV and icedtea-web 1.3.2-1; 1.7.0_21 (1.7.0u21), VM: OpenJDK 64-Bit; OpenJDK Runtime Environment (IcedTea 2.3.9) (7u21-2.3.9-5) Ubuntu 13.10 64bit: (10:41:22 PM) sgothel: same version here .. Mesa/Intel (10:41:31 PM) sgothel: fast 'fdrr' no crash (10:42:30 PM) sgothel: java version "1.7.0_25" (10:42:30 PM) sgothel: OpenJDK Runtime Environment (IcedTea 2.3.12) (7u25-2.3.12-4ubuntu3) (10:42:30 PM) sgothel: OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode) (10:42:46 PM) sgothel: Picked up _JAVA_OPTIONS: -Dnativewindow.debug=all -Djogl.debug=all -Dnewt.debug=all (10:42:54 PM) sgothel: jogl-applet-runner-newt-gears-normal-napplet.html (10:43:13 PM) sgothel: 32Bit false firefox version 26.0 WM: Kwin (KDE) (In reply to comment #5) > Ubuntu 13.10 64bit: > > (10:41:22 PM) sgothel: same version here .. Mesa/Intel > (10:41:31 PM) sgothel: fast 'fdrr' no crash > (10:42:30 PM) sgothel: java version "1.7.0_25" > (10:42:30 PM) sgothel: OpenJDK Runtime Environment (IcedTea 2.3.12) > (7u25-2.3.12-4ubuntu3) > (10:42:30 PM) sgothel: OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode) > (10:42:46 PM) sgothel: Picked up _JAVA_OPTIONS: -Dnativewindow.debug=all > -Djogl.debug=all -Dnewt.debug=all > (10:42:54 PM) sgothel: jogl-applet-runner-newt-gears-normal-napplet.html > (10:43:13 PM) sgothel: 32Bit false > > firefox version 26.0 > > WM: Kwin (KDE) WM: 'Unity' produces the issue! (11:09:57 PM) sgothel: TestGearsES2NewtCanvasAWT + [KWin, Unity] + Mesa-Soft: OK (11:10:33 PM) sgothel: TestGearsES2NewtCanvasAWT + [KWin, Unity] + Mesa-Intel: BadDrawable (GLX.dispatch_glXSwapBuffers0) (11:12:13 PM) sgothel: Plugin + Unity + Mesa-Soft: Crash (dispatch) (11:12:19 PM) sgothel: Plugin + KWin + Mesa-Soft: OK! (11:12:48 PM) sgothel: So the only surprising thing for me here is: TestGearsES2NewtCanvasAWT + KWin + Mesa-Intel: BadDrawable (GLX.dispatch_glXSwapBuffers0) Mesa-Soft via: export LIBGL_ALWAYS_SOFTWARE=true Ubuntu 13.10 - 'dist-upgrade' to latest at time of writing ..
> Mesa-Soft via:
> export LIBGL_ALWAYS_SOFTWARE=true
TestGearsES2NewtCanvasAWT + KWin-[GL/No] + Mesa-Soft: OK
=================================
TestGearsES2NewtCanvasAWT + KWin-[GL/No] + Mesa-Intel: Buggy
====================================
Info: Nativewindow X11 Error: 9 - BadDrawable (invalid Pixmap or Window parameter), dpy 0x7fa1f400e950, id 4800002, # 14595: 152:8 Unknown
java.lang.Exception: Stack trace
at java.lang.Thread.dumpStack(Unknown Source)
at jogamp.nativewindow.x11.X11Util.dumpStack(X11Util.java:618)
at jogamp.opengl.x11.glx.GLX.dispatch_glXSwapBuffers0(Native Method)
at jogamp.opengl.x11.glx.GLX.glXSwapBuffers(GLX.java:943)
Plugin + KWin-GL + Mesa-Soft: OK!
=======================
Plugin + KWin-GL + Mesa-Intel: OK!
=======================
(after upgrade)
Unity + Plugin + Mesa/Intel: FS toggle: OK Reparent toggle: Crash java.lang.Exception: Stack trace # An error report file with more information is saved as: # /home/jogamp/bin/hs_err_pid4903.log at java.lang.Thread.dumpStack(Thread.java:1344) at jogamp.nativewindow.x11.X11Util.dumpStack(X11Util.java:618) at jogamp.opengl.x11.glx.GLX.dispatch_glXSwapBuffers0(Native Method) at jogamp.opengl.x11.glx.GLX.glXSwapBuffers(GLX.java:943) at jogamp.opengl.x11.glx.X11GLXDrawable.swapBuffersImpl(X11GLXDrawable.java:74) ^^ Above works fine w/ KWin ! Simple partial remedy (as far as we can go): Disable 'reparent action' while in fullscreen mode! Other than that: Bug on behalf of 'Unity WM' and Mesa/Intel. (In reply to comment #9) > Unity + Plugin + Mesa/Intel: > FS toggle: OK > Reparent toggle: Crash To be correct: Crash after: ffr i.e. reparent action fails after fullscreen action in+out _and_ subsequent reparent. > > java.lang.Exception: Stack trace > # An error report file with more information is saved as: > # /home/jogamp/bin/hs_err_pid4903.log > at java.lang.Thread.dumpStack(Thread.java:1344) > at jogamp.nativewindow.x11.X11Util.dumpStack(X11Util.java:618) > at jogamp.opengl.x11.glx.GLX.dispatch_glXSwapBuffers0(Native Method) > at jogamp.opengl.x11.glx.GLX.glXSwapBuffers(GLX.java:943) > at > jogamp.opengl.x11.glx.X11GLXDrawable.swapBuffersImpl(X11GLXDrawable.java:74) > > ^^ Above works fine w/ KWin ! Window.reparent: START (main-Display-.x11_:0.0-1-EDT-1) valid true, windowHandle 0x4c00002 parentWindowHandle 0x4400011, visible true, becomesVisible true, forceDestroyCreate false, DEBUG_TEST_REPARENT_INCOMPATIBLE false, HINT_FORCE_RECREATION false, HINT_BECOMES_VISIBLE false, old parentWindow: 1224577418, new parentWindow: 0 Window.reparent: ACTION (main-Display-.x11_:0.0-1-EDT-1) windowHandle 0x4c00002 new parentWindowHandle 0x0, reparentAction ACTION_NATIVE_REPARENTING, pos/size 708/52 640x480, visible true X11Window reconfig: 708/52 640x480, [*PARENT false, FS false[span false], *UNDECOR false, ALWAYSONTOP false, VISIBLE true] X11: reconfigureWindow0 dpy 0x7f8e9c008670, scrn 0, parent (nil)/0x8f, win 0x4c00002, 708/52 640x480, parentChange 1, hasParent 0, decorationChange 1, undecorated 0, fullscreenChange 0, fullscreen 0 (span 0), alwaysOnTopChange 0, alwaysOnTop 0, visibleChange 0, visible 1, tempInvisible 1, fsEWMHFlags 0 X11: reconfigureWindow0 TEMP VISIBLE OFF X11: reconfigureWindow0 PARENTING in->out X11.WaitForReparentNotify: Event 0xA: Result 0, exp 0x4c00002, has (nil) Unity WM Reparent after 'Fullscreen On + Off': 1 - fullscreen on - Size: 640x480 -> 1920x1080 OK 2 - fullscreen off - Size: 1920x1080 -> 640x480 OK 3 - attempt to perform native reparent - 3.1 Size-1: 640x480 -> 640x480 OK - 3.2 Size-2: 640x480 -> 1920x1080 ERROR! - 3.3 fails due to WM claims size is fullscreen -> reparent via recreate -> XID BadDrawable 3) Log X11.WaitForReparentNotify: Event ReparentNotify: Result 1, exp 0x4c00002, has 0x4c00002 Window.windowRepaint AWT-EventQueue-0 (defer: false) 0/0 640x480 X11: reconfigureWindow0 DECORATIONS 1 X11: reconfigureWindow0 setPosSize 708/52 640x480 X11: reconfigureWindow0 TEMP VISIBLE ON X11: reconfigureWindow0 X (full) definePosition: 0/0 -> 708/52 X11: event . FocusOut call 0x4c00002 Window.focusChanged: (main-Display-.x11_:0.0-1-EDT-1): (defer: false) true -> false - windowHandle 0x4c00002 parentWindowHandle 0x0 consumeWindowEvent: WindowEvent[EVENT_WINDOW_LOST_FOCUS, NEWTEvent[source:jogamp.newt.driver.x11.WindowDriver, consumed false, when:1387437953156 d 0ms]], visible true 708/52 640x480 X11: event . ReparentNotify: call 0/0 OldParent 0x4c00002 (root 0x8f, top 0x1c08040), NewParent 0x1c08040 (root 0x8f, top 0x1c0803f), Window 0x4c00002 (root 0x8f, top 0x1c08040) Window.reparentNotify (main-Display-.x11_:0.0-1-EDT-1): 0x0 -> 0x1c08040 3.1) Log OK X11: event . ConfigureNotify call 0x4c00002 (parent 0x4c00002, above (nil)) 708/52 640x480 0, child-event: 0 NewtWindows_updateInsets: insets by _NET_FRAME_EXTENTS [ l 0, r 0, t 0, b 0 ] 3.2) Log ERROR X11: event . ConfigureNotify call 0x4c00002 (parent 0x4c00002, above (nil)) 0/0 1920x1200 0, child-event: 0 NewtWindows_updateInsets: insets by _NET_FRAME_EXTENTS [ l 0, r 0, t 0, b 0 ] Window.sizeChanged: (main-Display-.x11_:0.0-1-EDT-1): (defer: false) force false, 640x480 -> 1920x1200 - windowHandle 0x4c00002 parentWindowHandle 0x0 defineSize: 640x480 -> 1920x1200 ?? xwininfo reveils that the window reparented to TOP after fullscreen on and off ops (ffr) state is: Window state: Fullscreen Above Focused where it shall only be: Window state: Focused hence the 'fullscreen off' operation, while window is invisible, didn't took the states away. This is performed via _NET_WM_STATE -> 'root window' with data: _NET_WM_STATE_REMOVE, _NET_WM_STATE_FULLSCREEN, _NET_WM_STATE_ABOVE, which works well w/ all other WMs as tested so far (KWin, *box, ..). Remedy: - Reparent Child -> TOP: Reset _NET_WM_STATE (! _NET_WM_STATE_FULLSCREEN, ..) - Don't derive reparent success from successful position, WM's only regard custom position as a hint (X11). c9fcc8cd510abc0cbebb872dc3e457327655e778 Fix 'Unity WM' issue w/ sticky _NET_WM_STATE after Fullscreen On/Off Cycle b4e03a5168f62223369a483924eb2491250c6f95 Ignore reparent when in fullscreen - otherwise may confuse WM 0e1b4bf1b17b10933c3ccdfea5cef7eca6aad2fb X11 WindowDriver: Only perform 'tempFSAlwaysOnTop' toggle @ focusChanged(..) if isFullscreen() 9b2bbaf82ed410096ac279542357daefc0d6dc7f Remove position criteria from reparent/fullscreen success, WM's only regard custom position as a hint (X11). 0f1ddc82329835b903e31e301fcf134d1d7337be More robost Fullscreen Exit - 'tempInvisible' shall be also performed for top windows, solves Unity-WM background refresh issue - Rename local field 'fullscreen' -> '_fullscreen' to avoid confusion - Proper insets handling: Set 'WindowImpl.this.fullscreen = _fullscreen' only before reconfiguring, otherwise wrong position maybe used due to wrong insets value. Tested w/ WMs: KWin + Unity Reopened: - X11 Fullscreen ALT-TAB regression (no task-switcher visible) - ALWAYS_ON_TOP not persistent when child -> top c8726ef04b94ad8e66e1191a06ff793b908d130c - X11 Fullscreen ALT-TAB regression (no task-switcher visible) We still need the fast reconfigure path for ALWAYSONTOP only toggle. It was removed w/ commit c9fcc8cd510abc0cbebb872dc3e457327655e778, which disabled toggling FULLSCREEN and ALWAYSONTOP. Note: Another bug in Unity WM's Compiz: 'Unredirect Fullscreen Windows := True' disables the ALT-TAB taskbar/launcher HUD rendering and subsequent task-switch. Hence it shall be disabled .. nothing we can do here. - ALWAYS_ON_TOP not persistent when child -> top WM removes ALWAYS_ON_TOP state when reparenting, hence reinforce it when Child -> Top. ded0a8fb68067e3dbb42ff4f6fce315a237afa8f Fullscreen toggle in X11 requires a 'sleep' on sluggish WMs (Unity) ; Block insets change while toggling fullscreen mode. |