summaryrefslogtreecommitdiffstats
path: root/src/nativewindow
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2011-08-30 03:50:31 +0200
committerSven Gothel <[email protected]>2011-08-30 03:50:31 +0200
commit9ed513e9a9616f6028084df4c650c8caf31ea49d (patch)
tree5e8ea1af38a83d2e29b0762461e594153c133953 /src/nativewindow
parent9c64f265f4e3aaef85b7f017493e3695f46e00b3 (diff)
Workaround (Fix) for Bug 502: Multithreading issue w/ libX11 1.4.2 and libxcb 1.7 bug 20708
See https://jogamp.org/bugzilla/show_bug.cgi?id=502 Since the libX11/xcb code doesn't seem to be fixed anytime soon a better usable workaround is required than using a system property to enable 'over locking'. It turns out that the race condition is related to the parallel X11 Display connection usage of GLX/OpenGL and event dispatching. This workaround utilizes 2 X11 Display handles, one for windowing/OpenGL and one for event dispatching. This approach allows us to cont. multithreading use w/o locking the display and works on both implementations, the old bug-free libX11 and the 'new' buggy one. Downside is the little resource overhead of the 2nd X11 Display connection .. well. - Removes the property: 'nativewindow.x11.mt-bug'
Diffstat (limited to 'src/nativewindow')
-rw-r--r--src/nativewindow/classes/jogamp/nativewindow/x11/X11Util.java18
1 files changed, 4 insertions, 14 deletions
diff --git a/src/nativewindow/classes/jogamp/nativewindow/x11/X11Util.java b/src/nativewindow/classes/jogamp/nativewindow/x11/X11Util.java
index 117184a71..37056d44d 100644
--- a/src/nativewindow/classes/jogamp/nativewindow/x11/X11Util.java
+++ b/src/nativewindow/classes/jogamp/nativewindow/x11/X11Util.java
@@ -51,15 +51,6 @@ import javax.media.nativewindow.util.Point;
* Contains a thread safe X11 utility to retrieve display connections.
*/
public class X11Util {
- /**
- * 2011/06/14 libX11 1.4.2 and libxcb 1.7 bug 20708 - Multithreading Issues w/ OpenGL, ..
- * https://bugs.freedesktop.org/show_bug.cgi?id=20708
- * https://jogamp.org/bugzilla/show_bug.cgi?id=502
- * Affects: Ubuntu 11.04, OpenSuSE 11, ..
- * If the property <b>nativewindow.x11.mt-bug</b> is set to true, extensive X11 locking
- * is being applied, avoiding X11 multithreading capabilities.
- */
- public static final boolean MULTITHREADING_BUG = Debug.getBooleanProperty("nativewindow.x11.mt-bug", true, AccessController.getContext());
public static final boolean XINITTHREADS_ALWAYS_ENABLED = true;
private static final boolean DEBUG = Debug.debug("X11Util");
@@ -84,12 +75,11 @@ public class X11Util {
*/
initialize0( XINITTHREADS_ALWAYS_ENABLED ? true : firstX11ActionOnProcess );
- requiresX11Lock = !firstX11ActionOnProcess || MULTITHREADING_BUG;
+ requiresX11Lock = !firstX11ActionOnProcess ;
if(DEBUG) {
System.out.println("X11Util firstX11ActionOnProcess: "+firstX11ActionOnProcess+
", XINITTHREADS_ALWAYS_ENABLED "+XINITTHREADS_ALWAYS_ENABLED+
- ", MULTITHREADING_BUG "+MULTITHREADING_BUG+
", requiresX11Lock "+requiresX11Lock);
}
isInit = true;
@@ -160,8 +150,8 @@ public class X11Util {
// which is to tag a NamedDisplay uncloseable after creation.
private static Object globalLock = new Object();
private static LongObjectHashMap globalNamedDisplayMap = new LongObjectHashMap();
- private static List openDisplayList = new ArrayList();
- private static List pendingDisplayList = new ArrayList();
+ private static List<NamedDisplay> openDisplayList = new ArrayList<NamedDisplay>();
+ private static List<NamedDisplay> pendingDisplayList = new ArrayList<NamedDisplay>();
public static class NamedDisplay {
String name;
@@ -269,7 +259,7 @@ public class X11Util {
synchronized(globalLock) {
System.err.println("X11Util: Open X11 Display Connections: "+openDisplayList.size());
for(int i=0; i<pendingDisplayList.size(); i++) {
- NamedDisplay ndpy = (NamedDisplay) openDisplayList.get(i);
+ NamedDisplay ndpy = openDisplayList.get(i);
System.err.println("X11Util: ["+i+"]: "+ndpy);
if(null!=ndpy) {
Throwable t = ndpy.getCreationStack();