--- a/jdk/make/lib/Awt2dLibraries.gmk Thu Jul 28 09:29:38 2016 -0700
+++ b/jdk/make/lib/Awt2dLibraries.gmk Thu Jul 28 10:27:46 2016 -0700
@@ -147,8 +147,6 @@
ifeq ($(OPENJDK_TARGET_OS), windows)
LIBAWT_DIRS += $(JDK_TOPDIR)/src/java.desktop/share/native/common/awt/utility
-else
- LIBAWT_EXFILES := java2d/ShaderList.c
endif
ifneq ($(filter $(OPENJDK_TARGET_OS), solaris linux macosx aix), )
--- a/jdk/src/java.desktop/share/native/libawt/java2d/ShaderList.c Thu Jul 28 09:29:38 2016 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,143 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-#include <malloc.h>
-#include <string.h>
-
-#include "ShaderList.h"
-#include "Trace.h"
-
-/**
- * Creates a new ShaderInfo that wraps the given fragment program handle
- * and related data and stores it at the front of the provided ShaderList.
- * If the addition causes the ShaderList to outgrow its defined capacity,
- * the least-recently used item in the list (including its fragment program
- * object) will be disposed.
- */
-void
-ShaderList_AddProgram(ShaderList *programList,
- jlong programID,
- jint compType, jint compMode, jint flags)
-{
- ShaderInfo *info;
-
- J2dTraceLn(J2D_TRACE_INFO, "ShaderList_AddProgram");
-
- // create new ShaderInfo
- info = (ShaderInfo *)malloc(sizeof(ShaderInfo));
- if (info == NULL) {
- J2dTraceLn(J2D_TRACE_ERROR,
- "OGLContext_AddProgram: could not allocate ShaderInfo");
- return;
- }
-
- // fill in the information
- info->next = programList->head;
- info->programID = programID;
- info->compType = compType;
- info->compMode = compMode;
- info->flags = flags;
-
- // insert it at the head of the list
- programList->head = info;
-
- // run through the list and see if we need to delete the least
- // recently used item
- {
- int i = 1;
- ShaderInfo *prev = NULL;
- ShaderInfo *curr = info->next;
- while (curr != NULL) {
- if (i >= programList->maxItems) {
- prev->next = NULL;
- programList->dispose(curr->programID);
- free(curr);
- break;
- }
- i++;
- prev = curr;
- curr = curr->next;
- }
- }
-}
-
-/**
- * Locates a fragment program handle given a list of shader programs
- * (ShaderInfos), using the provided composite state and flags as search
- * parameters. The "flags" parameter is a bitwise-or'd value that helps
- * differentiate one program for another; the interpretation of this value
- * varies depending on the type of shader (BufImgOp, Paint, etc) but here
- * it is only used to find another ShaderInfo with that same "flags" value.
- * If no matching program can be located, this method returns 0.
- */
-jlong
-ShaderList_FindProgram(ShaderList *programList,
- jint compType, jint compMode, jint flags)
-{
- ShaderInfo *prev = NULL;
- ShaderInfo *info = programList->head;
-
- J2dTraceLn(J2D_TRACE_INFO, "ShaderList_FindProgram");
-
- while (info != NULL) {
- if (compType == info->compType &&
- compMode == info->compMode &&
- flags == info->flags)
- {
- // it's a match: move it to the front of the list (if it's not
- // there already) and patch up the links
- if (info != programList->head) {
- prev->next = info->next;
- info->next = programList->head;
- programList->head = info;
- }
- return info->programID;
- }
- prev = info;
- info = info->next;
- }
- return 0;
-}
-
-/**
- * Disposes all entries (and their associated shader program objects)
- * contained in the given ShaderList.
- */
-void
-ShaderList_Dispose(ShaderList *programList)
-{
- ShaderInfo *info = programList->head;
-
- J2dTraceLn(J2D_TRACE_INFO, "ShaderList_Dispose");
-
- while (info != NULL) {
- ShaderInfo *tmp = info->next;
- programList->dispose(info->programID);
- free(info);
- info = tmp;
- }
-
- programList->head = NULL;
-}
--- a/jdk/src/java.desktop/share/native/libawt/java2d/ShaderList.h Thu Jul 28 09:29:38 2016 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-#ifndef ShaderList_h_Included
-#define ShaderList_h_Included
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "jni.h"
-#include "jlong.h"
-
-typedef void (ShaderDisposeFunc)(jlong programID);
-
-/**
- * The following structures are used to maintain a list of fragment program
- * objects and their associated attributes. Each logical shader (e.g.
- * RadialGradientPaint shader, ConvolveOp shader) can have a number of
- * different variants depending on a number of factors, such as whether
- * antialiasing is enabled or the current composite mode. Since the number
- * of possible combinations of these factors is in the hundreds, we need
- * some way to create fragment programs on an as-needed basis, and also
- * keep them in a limited sized cache to avoid creating too many objects.
- *
- * The ShaderInfo structure keeps a reference to the fragment program's
- * handle, as well as some other values that help differentiate one ShaderInfo
- * from another. ShaderInfos can be chained together to form a linked list.
- *
- * The ShaderList structure acts as a cache for ShaderInfos, placing
- * most-recently used items at the front, and removing items from the
- * cache when its size exceeds the "maxItems" limit.
- */
-typedef struct _ShaderInfo ShaderInfo;
-
-typedef struct {
- ShaderInfo *head;
- ShaderDisposeFunc *dispose;
- jint maxItems;
-} ShaderList;
-
-struct _ShaderInfo {
- ShaderInfo *next;
- jlong programID;
- jint compType;
- jint compMode;
- jint flags;
-};
-
-void ShaderList_AddProgram(ShaderList *programList,
- jlong programID,
- jint compType, jint compMode,
- jint flags);
-jlong ShaderList_FindProgram(ShaderList *programList,
- jint compType, jint compMode,
- jint flags);
-void ShaderList_Dispose(ShaderList *programList);
-
-#ifdef __cplusplus
-};
-#endif
-
-#endif /* ShaderList_h_Included */
--- a/jdk/src/java.desktop/share/native/libfontmanager/HBShaper.c Thu Jul 28 09:29:38 2016 -0700
+++ b/jdk/src/java.desktop/share/native/libfontmanager/HBShaper.c Thu Jul 28 10:27:46 2016 -0700
@@ -278,6 +278,12 @@
hb_buffer_set_direction(buffer, direction);
chars = (*env)->GetCharArrayElements(env, text, NULL);
+ if ((*env)->ExceptionCheck(env)) {
+ hb_buffer_destroy(buffer);
+ hb_font_destroy(hbfont);
+ free((void*)jdkFontInfo);
+ return JNI_FALSE;
+ }
len = (*env)->GetArrayLength(env, text);
hb_buffer_add_utf16(buffer, chars, len, offset, limit-offset);
@@ -309,6 +315,7 @@
hb_font_destroy(hbfont);
free((void*)jdkFontInfo);
if (features != NULL) free(features);
+ (*env)->ReleaseCharArrayElements(env, text, chars, JNI_ABORT);
return JNI_TRUE;
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/windows/native/libawt/java2d/d3d/ShaderList.c Thu Jul 28 10:27:46 2016 -0700
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#include <malloc.h>
+#include <string.h>
+
+#include "ShaderList.h"
+#include "Trace.h"
+
+/**
+ * Creates a new ShaderInfo that wraps the given fragment program handle
+ * and related data and stores it at the front of the provided ShaderList.
+ * If the addition causes the ShaderList to outgrow its defined capacity,
+ * the least-recently used item in the list (including its fragment program
+ * object) will be disposed.
+ */
+void
+ShaderList_AddProgram(ShaderList *programList,
+ jlong programID,
+ jint compType, jint compMode, jint flags)
+{
+ ShaderInfo *info;
+
+ J2dTraceLn(J2D_TRACE_INFO, "ShaderList_AddProgram");
+
+ // create new ShaderInfo
+ info = (ShaderInfo *)malloc(sizeof(ShaderInfo));
+ if (info == NULL) {
+ J2dTraceLn(J2D_TRACE_ERROR,
+ "D3DContext_AddProgram: could not allocate ShaderInfo");
+ return;
+ }
+
+ // fill in the information
+ info->next = programList->head;
+ info->programID = programID;
+ info->compType = compType;
+ info->compMode = compMode;
+ info->flags = flags;
+
+ // insert it at the head of the list
+ programList->head = info;
+
+ // run through the list and see if we need to delete the least
+ // recently used item
+ {
+ int i = 1;
+ ShaderInfo *prev = NULL;
+ ShaderInfo *curr = info->next;
+ while (curr != NULL) {
+ if (i >= programList->maxItems) {
+ prev->next = NULL;
+ programList->dispose(curr->programID);
+ free(curr);
+ break;
+ }
+ i++;
+ prev = curr;
+ curr = curr->next;
+ }
+ }
+}
+
+/**
+ * Locates a fragment program handle given a list of shader programs
+ * (ShaderInfos), using the provided composite state and flags as search
+ * parameters. The "flags" parameter is a bitwise-or'd value that helps
+ * differentiate one program for another; the interpretation of this value
+ * varies depending on the type of shader (BufImgOp, Paint, etc) but here
+ * it is only used to find another ShaderInfo with that same "flags" value.
+ * If no matching program can be located, this method returns 0.
+ */
+jlong
+ShaderList_FindProgram(ShaderList *programList,
+ jint compType, jint compMode, jint flags)
+{
+ ShaderInfo *prev = NULL;
+ ShaderInfo *info = programList->head;
+
+ J2dTraceLn(J2D_TRACE_INFO, "ShaderList_FindProgram");
+
+ while (info != NULL) {
+ if (compType == info->compType &&
+ compMode == info->compMode &&
+ flags == info->flags)
+ {
+ // it's a match: move it to the front of the list (if it's not
+ // there already) and patch up the links
+ if (info != programList->head) {
+ prev->next = info->next;
+ info->next = programList->head;
+ programList->head = info;
+ }
+ return info->programID;
+ }
+ prev = info;
+ info = info->next;
+ }
+ return 0;
+}
+
+/**
+ * Disposes all entries (and their associated shader program objects)
+ * contained in the given ShaderList.
+ */
+void
+ShaderList_Dispose(ShaderList *programList)
+{
+ ShaderInfo *info = programList->head;
+
+ J2dTraceLn(J2D_TRACE_INFO, "ShaderList_Dispose");
+
+ while (info != NULL) {
+ ShaderInfo *tmp = info->next;
+ programList->dispose(info->programID);
+ free(info);
+ info = tmp;
+ }
+
+ programList->head = NULL;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/windows/native/libawt/java2d/d3d/ShaderList.h Thu Jul 28 10:27:46 2016 -0700
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#ifndef ShaderList_h_Included
+#define ShaderList_h_Included
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "jni.h"
+#include "jlong.h"
+
+typedef void (ShaderDisposeFunc)(jlong programID);
+
+/**
+ * The following structures are used to maintain a list of fragment program
+ * objects and their associated attributes. Each logical shader (e.g.
+ * RadialGradientPaint shader, ConvolveOp shader) can have a number of
+ * different variants depending on a number of factors, such as whether
+ * antialiasing is enabled or the current composite mode. Since the number
+ * of possible combinations of these factors is in the hundreds, we need
+ * some way to create fragment programs on an as-needed basis, and also
+ * keep them in a limited sized cache to avoid creating too many objects.
+ *
+ * The ShaderInfo structure keeps a reference to the fragment program's
+ * handle, as well as some other values that help differentiate one ShaderInfo
+ * from another. ShaderInfos can be chained together to form a linked list.
+ *
+ * The ShaderList structure acts as a cache for ShaderInfos, placing
+ * most-recently used items at the front, and removing items from the
+ * cache when its size exceeds the "maxItems" limit.
+ */
+typedef struct _ShaderInfo ShaderInfo;
+
+typedef struct {
+ ShaderInfo *head;
+ ShaderDisposeFunc *dispose;
+ jint maxItems;
+} ShaderList;
+
+struct _ShaderInfo {
+ ShaderInfo *next;
+ jlong programID;
+ jint compType;
+ jint compMode;
+ jint flags;
+};
+
+void ShaderList_AddProgram(ShaderList *programList,
+ jlong programID,
+ jint compType, jint compMode,
+ jint flags);
+jlong ShaderList_FindProgram(ShaderList *programList,
+ jint compType, jint compMode,
+ jint flags);
+void ShaderList_Dispose(ShaderList *programList);
+
+#ifdef __cplusplus
+};
+#endif
+
+#endif /* ShaderList_h_Included */