--- old/src/solaris/native/sun/java2d/x11/XRBackendNative.c 2013-09-28 18:19:42.628538496 -0400 +++ new/src/solaris/native/sun/java2d/x11/XRBackendNative.c 2013-09-28 18:19:42.520537808 -0400 @@ -31,6 +31,10 @@ #include +#ifdef __linux__ + #include +#endif + /* On Solaris 10 updates 8, 9, the render.h file defines these * protocol values but does not define the structs in Xrender.h. * Thus in order to get these always defined on Solaris 10 @@ -131,7 +135,7 @@ #define MAX_PAYLOAD (262140u - 36u) #define MAXUINT (0xffffffffu) -static jboolean IsXRenderAvailable(jboolean verbose) { +static jboolean IsXRenderAvailable(jboolean verbose, jboolean ignoreLinuxVersion) { void *xrenderlib; @@ -253,6 +257,31 @@ } #endif +#ifdef __linux__ + /* + * Check for Linux >= 3.5 (Ubuntu 12.04.02 LTS) to avoid hitting + * https://bugs.freedesktop.org/show_bug.cgi?id=48045 + */ + struct utsname utsbuf; + if(uname(&utsbuf) >= 0) { + int major, minor, revision; + if(sscanf(utsbuf.release, "%i.%i.%i", &major, &minor, &revision) == 3) { + if(major <= 3 && minor < 5) { + if(!ignoreLinuxVersion) { + available = JNI_FALSE; + } + else if(verbose) { + printf("WARNING: Linux < 3.5 detected.\n" + "The pipeline will be enabled, but graphical " + "artifacts can occur with old graphic drivers.\n" + "See the release notes for more details.\n"); + fflush(stdout); + } + } + } + } +#endif // __linux__ + return available; } /* @@ -262,7 +291,7 @@ */ JNIEXPORT jboolean JNICALL Java_sun_awt_X11GraphicsEnvironment_initXRender -(JNIEnv *env, jclass x11ge, jboolean verbose) +(JNIEnv *env, jclass x11ge, jboolean verbose, jboolean ignoreLinuxVersion) { #ifndef HEADLESS static jboolean xrenderAvailable = JNI_FALSE; @@ -277,7 +306,7 @@ } #endif AWT_LOCK(); - xrenderAvailable = IsXRenderAvailable(verbose); + xrenderAvailable = IsXRenderAvailable(verbose, ignoreLinuxVersion); AWT_UNLOCK(); firstTime = JNI_FALSE; }