You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
202 lines
7.9 KiB
202 lines
7.9 KiB
|
|
# HG changeset patch
|
|
# User andrew
|
|
# Date 1438275152 -3600
|
|
# Node ID a2334007f1a8504d2bd4a2c2a037732c289649c3
|
|
# Parent ab23850139cb2c666e613010842a1f984b184a3a
|
|
PR2568: openjdk causes a full desktop crash on RHEL 6 i586
|
|
Summary: Re-apply "8025775: JNI warnings in TryXShmAttach"; some changes lost in bad merge changeset 4b26f93b23ba
|
|
|
|
diff -r ab23850139cb -r a2334007f1a8 src/solaris/classes/sun/awt/X11/XConstants.java
|
|
--- openjdk/jdk/src/solaris/classes/sun/awt/X11/XConstants.java Wed Oct 23 10:50:34 2013 +0200
|
|
+++ openjdk/jdk/src/solaris/classes/sun/awt/X11/XConstants.java Thu Jul 30 17:52:32 2015 +0100
|
|
@@ -699,9 +699,4 @@
|
|
public static final long XkbModifierMapMask = (1L<<2);
|
|
public static final long XkbVirtualModsMask = (1L<<6); //server map
|
|
|
|
- /*****************************************************************
|
|
- * X SHARED MEMORY EXTENSION FUNCTIONS
|
|
- *****************************************************************/
|
|
-
|
|
- public static final int X_ShmAttach = 1;
|
|
}
|
|
diff -r ab23850139cb -r a2334007f1a8 src/solaris/classes/sun/awt/X11/XErrorHandler.java
|
|
--- openjdk/jdk/src/solaris/classes/sun/awt/X11/XErrorHandler.java Wed Oct 23 10:50:34 2013 +0200
|
|
+++ openjdk/jdk/src/solaris/classes/sun/awt/X11/XErrorHandler.java Thu Jul 30 17:52:32 2015 +0100
|
|
@@ -41,29 +41,6 @@
|
|
return XErrorHandlerUtil.SAVED_XERROR_HANDLER(display, err);
|
|
}
|
|
}
|
|
-
|
|
- /**
|
|
- * This is a base synthetic error handler containing a boolean flag which allows
|
|
- * to show that an error is handled or not.
|
|
- */
|
|
- public static class XErrorHandlerWithFlag extends XBaseErrorHandler {
|
|
- private volatile boolean errorOccurred = false;
|
|
-
|
|
- public boolean getErrorOccurredFlag() {
|
|
- return errorOccurred;
|
|
- }
|
|
-
|
|
- /**
|
|
- * Sets an internal boolean flag to a particular value. Should be always called
|
|
- * with {@code false} value of the parameter {@code errorOccurred} before this
|
|
- * error handler is set as current.
|
|
- * @param errorOccurred {@code true} to indicate that an error was handled,
|
|
- * {@code false} to reset the internal boolean flag
|
|
- */
|
|
- public void setErrorOccurredFlag(boolean errorOccurred) {
|
|
- this.errorOccurred = errorOccurred;
|
|
- }
|
|
- }
|
|
|
|
/*
|
|
* Instead of validating window id, we simply call XGetWindowProperty,
|
|
@@ -99,75 +76,4 @@
|
|
return theInstance;
|
|
}
|
|
}
|
|
-
|
|
- /**
|
|
- * This is a synthetic error handler for errors generated by the native function
|
|
- * {@code XShmAttach}. If an error is handled, an internal boolean flag of the
|
|
- * handler is set to {@code true}.
|
|
- */
|
|
- public static final class XShmAttachHandler extends XErrorHandlerWithFlag {
|
|
- private XShmAttachHandler() {}
|
|
-
|
|
- @Override
|
|
- public int handleError(long display, XErrorEvent err) {
|
|
- if (err.get_minor_code() == XConstants.X_ShmAttach) {
|
|
- setErrorOccurredFlag(true);
|
|
- return 0;
|
|
- }
|
|
- return super.handleError(display, err);
|
|
- }
|
|
-
|
|
- // Shared instance
|
|
- private static XShmAttachHandler theInstance = new XShmAttachHandler();
|
|
- public static XShmAttachHandler getInstance() {
|
|
- return theInstance;
|
|
- }
|
|
- }
|
|
-
|
|
- /**
|
|
- * This is a synthetic error handler for {@code BadAlloc} errors generated by the
|
|
- * native {@code glX*} functions. Its internal boolean flag is set to {@code true},
|
|
- * if an error is handled.
|
|
- */
|
|
- public static final class GLXBadAllocHandler extends XErrorHandlerWithFlag {
|
|
- private GLXBadAllocHandler() {}
|
|
-
|
|
- @Override
|
|
- public int handleError(long display, XErrorEvent err) {
|
|
- if (err.get_error_code() == XConstants.BadAlloc) {
|
|
- setErrorOccurredFlag(true);
|
|
- return 0;
|
|
- }
|
|
- return super.handleError(display, err);
|
|
- }
|
|
-
|
|
- private static GLXBadAllocHandler theInstance = new GLXBadAllocHandler();
|
|
- public static GLXBadAllocHandler getInstance() {
|
|
- return theInstance;
|
|
- }
|
|
- }
|
|
-
|
|
- /**
|
|
- * This is a synthetic error handler for errors generated by the native function
|
|
- * {@code XChangeWindowAttributes}. If an error is handled, an internal boolean
|
|
- * flag of the handler is set to {@code true}.
|
|
- */
|
|
- public static final class XChangeWindowAttributesHandler extends XErrorHandlerWithFlag {
|
|
- private XChangeWindowAttributesHandler() {}
|
|
-
|
|
- @Override
|
|
- public int handleError(long display, XErrorEvent err) {
|
|
- if ((err.get_request_code() == XProtocolConstants.X_ChangeWindowAttributes) &&
|
|
- (err.get_error_code() == XConstants.BadAccess)) {
|
|
- setErrorOccurredFlag(true);
|
|
- return 0;
|
|
- }
|
|
- return super.handleError(display, err);
|
|
- }
|
|
-
|
|
- private static XChangeWindowAttributesHandler theInstance = new XChangeWindowAttributesHandler();
|
|
- public static XChangeWindowAttributesHandler getInstance() {
|
|
- return theInstance;
|
|
- }
|
|
- }
|
|
}
|
|
diff -r ab23850139cb -r a2334007f1a8 src/solaris/native/sun/awt/awt_GraphicsEnv.h
|
|
--- openjdk/jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.h Wed Oct 23 10:50:34 2013 +0200
|
|
+++ openjdk/jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.h Thu Jul 30 17:52:32 2015 +0100
|
|
@@ -54,7 +54,7 @@
|
|
|
|
void TryInitMITShm(JNIEnv *env, jint *shmExt, jint *shmPixmaps);
|
|
void resetXShmAttachFailed();
|
|
-jboolean TryXShmAttach(JNIEnv *env, Display *display, XShmSegmentInfo *shminfo);
|
|
+jboolean isXShmAttachFailed();
|
|
|
|
#endif /* MITSHM */
|
|
|
|
diff -r ab23850139cb -r a2334007f1a8 src/solaris/native/sun/awt/awt_xembed_server.c
|
|
--- openjdk/jdk/src/solaris/native/sun/awt/awt_xembed_server.c Wed Oct 23 10:50:34 2013 +0200
|
|
+++ openjdk/jdk/src/solaris/native/sun/awt/awt_xembed_server.c Thu Jul 30 17:52:32 2015 +0100
|
|
@@ -644,19 +644,12 @@
|
|
return dim;
|
|
}
|
|
|
|
-Boolean isMapped(JNIEnv* env, Window w) {
|
|
+Boolean isMapped(Window w) {
|
|
XWindowAttributes attr;
|
|
Status status = 0;
|
|
- jboolean errorOccurredFlag;
|
|
- jobject errorHandlerRef;
|
|
- jobject savedError;
|
|
- unsigned char xerror_code;
|
|
-
|
|
- EXEC_WITH_XERROR_HANDLER(env, "sun/awt/X11/XErrorHandler$IgnoreBadWindowHandler",
|
|
- "()Lsun/awt/X11/XErrorHandler$IgnoreBadWindowHandler;", JNI_FALSE,
|
|
- errorHandlerRef, errorOccurredFlag,
|
|
- status = XGetWindowAttributes(awt_display, w, &attr));
|
|
- xerror_code = GET_XERROR_CODE(env, savedError);
|
|
+ WITH_XERROR_HANDLER(xerror_ignore_bad_window);
|
|
+ status = XGetWindowAttributes(awt_display, w, &attr);
|
|
+ RESTORE_XERROR_HANDLER;
|
|
if (status == 0 || xerror_code != Success) {
|
|
return False;
|
|
}
|
|
@@ -692,7 +685,7 @@
|
|
sdata->version = *data;
|
|
flags = *(data+1);
|
|
new_mapped = (flags & XEMBED_MAPPED) != 0;
|
|
- currently_mapped = isMapped(env, sdata->handle);
|
|
+ currently_mapped = isMapped(sdata->handle);
|
|
if (new_mapped != currently_mapped) {
|
|
if (new_mapped) {
|
|
XMapWindow(awt_display, sdata->handle);
|
|
diff -r ab23850139cb -r a2334007f1a8 src/solaris/native/sun/java2d/x11/X11SurfaceData.c
|
|
--- openjdk/jdk/src/solaris/native/sun/java2d/x11/X11SurfaceData.c Wed Oct 23 10:50:34 2013 +0200
|
|
+++ openjdk/jdk/src/solaris/native/sun/java2d/x11/X11SurfaceData.c Thu Jul 30 17:52:32 2015 +0100
|
|
@@ -551,8 +551,6 @@
|
|
{
|
|
XImage *img = NULL;
|
|
XShmSegmentInfo *shminfo;
|
|
- JNIEnv* env;
|
|
- jboolean xShmAttachResult;
|
|
|
|
shminfo = malloc(sizeof(XShmSegmentInfo));
|
|
if (shminfo == NULL) {
|
|
@@ -603,7 +601,7 @@
|
|
*/
|
|
shmctl(shminfo->shmid, IPC_RMID, 0);
|
|
|
|
- if (xShmAttachResult == JNI_FALSE) {
|
|
+ if (isXShmAttachFailed() == JNI_TRUE) {
|
|
J2dRlsTraceLn1(J2D_TRACE_ERROR,
|
|
"X11SD_SetupSharedSegment XShmAttach has failed: %s",
|
|
strerror(errno));
|
|
|