1 |
commit: 23e8fa2dfbb91d9e3da98e3da7c607085df62406 |
2 |
Author: James Le Cuirot <chewi <AT> gentoo <DOT> org> |
3 |
AuthorDate: Sat Oct 10 22:22:05 2015 +0000 |
4 |
Commit: James Le Cuirot <chewi <AT> gentoo <DOT> org> |
5 |
CommitDate: Sat Oct 10 22:22:53 2015 +0000 |
6 |
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=23e8fa2d |
7 |
|
8 |
dev-java/icedtea: Backport XShm fix from 2.7.0 |
9 |
|
10 |
Addresses bug #561500. |
11 |
|
12 |
Package-Manager: portage-2.2.20.1 |
13 |
|
14 |
dev-java/icedtea/files/TryXShmAttach.patch | 201 +++++++++++++++++++++ |
15 |
...ea-7.2.6.1.ebuild => icedtea-7.2.6.1-r1.ebuild} | 4 + |
16 |
2 files changed, 205 insertions(+) |
17 |
|
18 |
diff --git a/dev-java/icedtea/files/TryXShmAttach.patch b/dev-java/icedtea/files/TryXShmAttach.patch |
19 |
new file mode 100644 |
20 |
index 0000000..4157bb6 |
21 |
--- /dev/null |
22 |
+++ b/dev-java/icedtea/files/TryXShmAttach.patch |
23 |
@@ -0,0 +1,201 @@ |
24 |
+ |
25 |
+# HG changeset patch |
26 |
+# User andrew |
27 |
+# Date 1438275152 -3600 |
28 |
+# Node ID a2334007f1a8504d2bd4a2c2a037732c289649c3 |
29 |
+# Parent ab23850139cb2c666e613010842a1f984b184a3a |
30 |
+PR2568: openjdk causes a full desktop crash on RHEL 6 i586 |
31 |
+Summary: Re-apply "8025775: JNI warnings in TryXShmAttach"; some changes lost in bad merge changeset 4b26f93b23ba |
32 |
+ |
33 |
+diff -r ab23850139cb -r a2334007f1a8 src/solaris/classes/sun/awt/X11/XConstants.java |
34 |
+--- openjdk/jdk/src/solaris/classes/sun/awt/X11/XConstants.java Wed Oct 23 10:50:34 2013 +0200 |
35 |
++++ openjdk/jdk/src/solaris/classes/sun/awt/X11/XConstants.java Thu Jul 30 17:52:32 2015 +0100 |
36 |
+@@ -699,9 +699,4 @@ |
37 |
+ public static final long XkbModifierMapMask = (1L<<2); |
38 |
+ public static final long XkbVirtualModsMask = (1L<<6); //server map |
39 |
+ |
40 |
+- /***************************************************************** |
41 |
+- * X SHARED MEMORY EXTENSION FUNCTIONS |
42 |
+- *****************************************************************/ |
43 |
+- |
44 |
+- public static final int X_ShmAttach = 1; |
45 |
+ } |
46 |
+diff -r ab23850139cb -r a2334007f1a8 src/solaris/classes/sun/awt/X11/XErrorHandler.java |
47 |
+--- openjdk/jdk/src/solaris/classes/sun/awt/X11/XErrorHandler.java Wed Oct 23 10:50:34 2013 +0200 |
48 |
++++ openjdk/jdk/src/solaris/classes/sun/awt/X11/XErrorHandler.java Thu Jul 30 17:52:32 2015 +0100 |
49 |
+@@ -41,29 +41,6 @@ |
50 |
+ return XErrorHandlerUtil.SAVED_XERROR_HANDLER(display, err); |
51 |
+ } |
52 |
+ } |
53 |
+- |
54 |
+- /** |
55 |
+- * This is a base synthetic error handler containing a boolean flag which allows |
56 |
+- * to show that an error is handled or not. |
57 |
+- */ |
58 |
+- public static class XErrorHandlerWithFlag extends XBaseErrorHandler { |
59 |
+- private volatile boolean errorOccurred = false; |
60 |
+- |
61 |
+- public boolean getErrorOccurredFlag() { |
62 |
+- return errorOccurred; |
63 |
+- } |
64 |
+- |
65 |
+- /** |
66 |
+- * Sets an internal boolean flag to a particular value. Should be always called |
67 |
+- * with {@code false} value of the parameter {@code errorOccurred} before this |
68 |
+- * error handler is set as current. |
69 |
+- * @param errorOccurred {@code true} to indicate that an error was handled, |
70 |
+- * {@code false} to reset the internal boolean flag |
71 |
+- */ |
72 |
+- public void setErrorOccurredFlag(boolean errorOccurred) { |
73 |
+- this.errorOccurred = errorOccurred; |
74 |
+- } |
75 |
+- } |
76 |
+ |
77 |
+ /* |
78 |
+ * Instead of validating window id, we simply call XGetWindowProperty, |
79 |
+@@ -99,75 +76,4 @@ |
80 |
+ return theInstance; |
81 |
+ } |
82 |
+ } |
83 |
+- |
84 |
+- /** |
85 |
+- * This is a synthetic error handler for errors generated by the native function |
86 |
+- * {@code XShmAttach}. If an error is handled, an internal boolean flag of the |
87 |
+- * handler is set to {@code true}. |
88 |
+- */ |
89 |
+- public static final class XShmAttachHandler extends XErrorHandlerWithFlag { |
90 |
+- private XShmAttachHandler() {} |
91 |
+- |
92 |
+- @Override |
93 |
+- public int handleError(long display, XErrorEvent err) { |
94 |
+- if (err.get_minor_code() == XConstants.X_ShmAttach) { |
95 |
+- setErrorOccurredFlag(true); |
96 |
+- return 0; |
97 |
+- } |
98 |
+- return super.handleError(display, err); |
99 |
+- } |
100 |
+- |
101 |
+- // Shared instance |
102 |
+- private static XShmAttachHandler theInstance = new XShmAttachHandler(); |
103 |
+- public static XShmAttachHandler getInstance() { |
104 |
+- return theInstance; |
105 |
+- } |
106 |
+- } |
107 |
+- |
108 |
+- /** |
109 |
+- * This is a synthetic error handler for {@code BadAlloc} errors generated by the |
110 |
+- * native {@code glX*} functions. Its internal boolean flag is set to {@code true}, |
111 |
+- * if an error is handled. |
112 |
+- */ |
113 |
+- public static final class GLXBadAllocHandler extends XErrorHandlerWithFlag { |
114 |
+- private GLXBadAllocHandler() {} |
115 |
+- |
116 |
+- @Override |
117 |
+- public int handleError(long display, XErrorEvent err) { |
118 |
+- if (err.get_error_code() == XConstants.BadAlloc) { |
119 |
+- setErrorOccurredFlag(true); |
120 |
+- return 0; |
121 |
+- } |
122 |
+- return super.handleError(display, err); |
123 |
+- } |
124 |
+- |
125 |
+- private static GLXBadAllocHandler theInstance = new GLXBadAllocHandler(); |
126 |
+- public static GLXBadAllocHandler getInstance() { |
127 |
+- return theInstance; |
128 |
+- } |
129 |
+- } |
130 |
+- |
131 |
+- /** |
132 |
+- * This is a synthetic error handler for errors generated by the native function |
133 |
+- * {@code XChangeWindowAttributes}. If an error is handled, an internal boolean |
134 |
+- * flag of the handler is set to {@code true}. |
135 |
+- */ |
136 |
+- public static final class XChangeWindowAttributesHandler extends XErrorHandlerWithFlag { |
137 |
+- private XChangeWindowAttributesHandler() {} |
138 |
+- |
139 |
+- @Override |
140 |
+- public int handleError(long display, XErrorEvent err) { |
141 |
+- if ((err.get_request_code() == XProtocolConstants.X_ChangeWindowAttributes) && |
142 |
+- (err.get_error_code() == XConstants.BadAccess)) { |
143 |
+- setErrorOccurredFlag(true); |
144 |
+- return 0; |
145 |
+- } |
146 |
+- return super.handleError(display, err); |
147 |
+- } |
148 |
+- |
149 |
+- private static XChangeWindowAttributesHandler theInstance = new XChangeWindowAttributesHandler(); |
150 |
+- public static XChangeWindowAttributesHandler getInstance() { |
151 |
+- return theInstance; |
152 |
+- } |
153 |
+- } |
154 |
+ } |
155 |
+diff -r ab23850139cb -r a2334007f1a8 src/solaris/native/sun/awt/awt_GraphicsEnv.h |
156 |
+--- openjdk/jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.h Wed Oct 23 10:50:34 2013 +0200 |
157 |
++++ openjdk/jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.h Thu Jul 30 17:52:32 2015 +0100 |
158 |
+@@ -54,7 +54,7 @@ |
159 |
+ |
160 |
+ void TryInitMITShm(JNIEnv *env, jint *shmExt, jint *shmPixmaps); |
161 |
+ void resetXShmAttachFailed(); |
162 |
+-jboolean TryXShmAttach(JNIEnv *env, Display *display, XShmSegmentInfo *shminfo); |
163 |
++jboolean isXShmAttachFailed(); |
164 |
+ |
165 |
+ #endif /* MITSHM */ |
166 |
+ |
167 |
+diff -r ab23850139cb -r a2334007f1a8 src/solaris/native/sun/awt/awt_xembed_server.c |
168 |
+--- openjdk/jdk/src/solaris/native/sun/awt/awt_xembed_server.c Wed Oct 23 10:50:34 2013 +0200 |
169 |
++++ openjdk/jdk/src/solaris/native/sun/awt/awt_xembed_server.c Thu Jul 30 17:52:32 2015 +0100 |
170 |
+@@ -644,19 +644,12 @@ |
171 |
+ return dim; |
172 |
+ } |
173 |
+ |
174 |
+-Boolean isMapped(JNIEnv* env, Window w) { |
175 |
++Boolean isMapped(Window w) { |
176 |
+ XWindowAttributes attr; |
177 |
+ Status status = 0; |
178 |
+- jboolean errorOccurredFlag; |
179 |
+- jobject errorHandlerRef; |
180 |
+- jobject savedError; |
181 |
+- unsigned char xerror_code; |
182 |
+- |
183 |
+- EXEC_WITH_XERROR_HANDLER(env, "sun/awt/X11/XErrorHandler$IgnoreBadWindowHandler", |
184 |
+- "()Lsun/awt/X11/XErrorHandler$IgnoreBadWindowHandler;", JNI_FALSE, |
185 |
+- errorHandlerRef, errorOccurredFlag, |
186 |
+- status = XGetWindowAttributes(awt_display, w, &attr)); |
187 |
+- xerror_code = GET_XERROR_CODE(env, savedError); |
188 |
++ WITH_XERROR_HANDLER(xerror_ignore_bad_window); |
189 |
++ status = XGetWindowAttributes(awt_display, w, &attr); |
190 |
++ RESTORE_XERROR_HANDLER; |
191 |
+ if (status == 0 || xerror_code != Success) { |
192 |
+ return False; |
193 |
+ } |
194 |
+@@ -692,7 +685,7 @@ |
195 |
+ sdata->version = *data; |
196 |
+ flags = *(data+1); |
197 |
+ new_mapped = (flags & XEMBED_MAPPED) != 0; |
198 |
+- currently_mapped = isMapped(env, sdata->handle); |
199 |
++ currently_mapped = isMapped(sdata->handle); |
200 |
+ if (new_mapped != currently_mapped) { |
201 |
+ if (new_mapped) { |
202 |
+ XMapWindow(awt_display, sdata->handle); |
203 |
+diff -r ab23850139cb -r a2334007f1a8 src/solaris/native/sun/java2d/x11/X11SurfaceData.c |
204 |
+--- openjdk/jdk/src/solaris/native/sun/java2d/x11/X11SurfaceData.c Wed Oct 23 10:50:34 2013 +0200 |
205 |
++++ openjdk/jdk/src/solaris/native/sun/java2d/x11/X11SurfaceData.c Thu Jul 30 17:52:32 2015 +0100 |
206 |
+@@ -551,8 +551,6 @@ |
207 |
+ { |
208 |
+ XImage *img = NULL; |
209 |
+ XShmSegmentInfo *shminfo; |
210 |
+- JNIEnv* env; |
211 |
+- jboolean xShmAttachResult; |
212 |
+ |
213 |
+ shminfo = malloc(sizeof(XShmSegmentInfo)); |
214 |
+ if (shminfo == NULL) { |
215 |
+@@ -603,7 +601,7 @@ |
216 |
+ */ |
217 |
+ shmctl(shminfo->shmid, IPC_RMID, 0); |
218 |
+ |
219 |
+- if (xShmAttachResult == JNI_FALSE) { |
220 |
++ if (isXShmAttachFailed() == JNI_TRUE) { |
221 |
+ J2dRlsTraceLn1(J2D_TRACE_ERROR, |
222 |
+ "X11SD_SetupSharedSegment XShmAttach has failed: %s", |
223 |
+ strerror(errno)); |
224 |
+ |
225 |
|
226 |
diff --git a/dev-java/icedtea/icedtea-7.2.6.1.ebuild b/dev-java/icedtea/icedtea-7.2.6.1-r1.ebuild |
227 |
similarity index 98% |
228 |
rename from dev-java/icedtea/icedtea-7.2.6.1.ebuild |
229 |
rename to dev-java/icedtea/icedtea-7.2.6.1-r1.ebuild |
230 |
index 2027cea..9645c54 100644 |
231 |
--- a/dev-java/icedtea/icedtea-7.2.6.1.ebuild |
232 |
+++ b/dev-java/icedtea/icedtea-7.2.6.1-r1.ebuild |
233 |
@@ -284,6 +284,10 @@ src_configure() { |
234 |
|
235 |
unset JAVA_HOME JDK_HOME CLASSPATH JAVAC JAVACFLAGS |
236 |
|
237 |
+ # https://bugs.gentoo.org/show_bug.cgi?id=561500 |
238 |
+ ln -s "${FILESDIR}/TryXShmAttach.patch" || die |
239 |
+ export DISTRIBUTION_PATCHES="TryXShmAttach.patch" |
240 |
+ |
241 |
econf ${config} \ |
242 |
--with-openjdk-src-zip="${DISTDIR}/${OPENJDK_GENTOO_TARBALL}" \ |
243 |
--with-corba-src-zip="${DISTDIR}/${CORBA_GENTOO_TARBALL}" \ |