changeset 13118:cadea780bc76 jdk8u192-b03 jdk8u202-b00

Merge
author robm
date Fri, 20 Jul 2018 05:44:14 -0700
parents 53a04f033c36 7b30bb9b05bd
children b17237c1ab9c 61d7ce442d95
files
diffstat 14 files changed, 99 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/make/mapfiles/libawt_xawt/mapfile-vers	Thu Jul 19 10:00:38 2018 +0100
+++ b/make/mapfiles/libawt_xawt/mapfile-vers	Fri Jul 20 05:44:14 2018 -0700
@@ -158,6 +158,7 @@
         Java_sun_awt_X11_XRobotPeer_mouseReleaseImpl;
         Java_sun_awt_X11_XRobotPeer_mouseWheelImpl;
         Java_sun_awt_X11_XRobotPeer_setup;
+        Java_sun_awt_X11_XRobotPeer_loadNativeLibraries;
         Java_sun_awt_X11_XToolkit_getNumberOfButtonsImpl;
         Java_java_awt_Component_initIDs;
         Java_java_awt_Container_initIDs;
--- a/src/share/classes/java/security/IdentityScope.java	Thu Jul 19 10:00:38 2018 +0100
+++ b/src/share/classes/java/security/IdentityScope.java	Fri Jul 20 05:44:14 2018 -0700
@@ -88,8 +88,8 @@
             try {
                 Class.forName(classname);
             } catch (ClassNotFoundException e) {
-                //Security.error("unable to establish a system scope from " +
-                //             classname);
+                System.err.println("unable to establish a system scope from " +
+                             classname);
                 e.printStackTrace();
             }
         }
--- a/src/share/classes/java/security/Signature.java	Thu Jul 19 10:00:38 2018 +0100
+++ b/src/share/classes/java/security/Signature.java	Fri Jul 20 05:44:14 2018 -0700
@@ -1051,7 +1051,7 @@
                             debug.println("Further warnings of this type will "
                                 + "be suppressed");
                         }
-                        new Exception("Call trace").printStackTrace();
+                        new Exception("Debug call trace").printStackTrace();
                     }
                 }
                 Exception lastException = null;
--- a/src/share/classes/sun/security/jca/ProviderList.java	Thu Jul 19 10:00:38 2018 +0100
+++ b/src/share/classes/sun/security/jca/ProviderList.java	Fri Jul 20 05:44:14 2018 -0700
@@ -275,7 +275,7 @@
         }
         if (debug != null) {
             debug.println("Loading all providers");
-            new Exception("Call trace").printStackTrace();
+            new Exception("Debug Info. Call trace:").printStackTrace();
         }
         int n = 0;
         for (int i = 0; i < configs.length; i++) {
--- a/src/share/classes/sun/security/pkcs/PKCS8Key.java	Thu Jul 19 10:00:38 2018 +0100
+++ b/src/share/classes/sun/security/pkcs/PKCS8Key.java	Fri Jul 20 05:44:14 2018 -0700
@@ -347,7 +347,6 @@
             }
 
         } catch (IOException e) {
-            // e.printStackTrace ();
             throw new InvalidKeyException("IOException : " +
                                           e.getMessage());
         }
--- a/src/share/classes/sun/security/provider/AuthPolicyFile.java	Thu Jul 19 10:00:38 2018 +0100
+++ b/src/share/classes/sun/security/provider/AuthPolicyFile.java	Fri Jul 20 05:44:14 2018 -0700
@@ -186,6 +186,7 @@
             } catch (Exception e) {
                 // ignore, treat it like we have no keystore
                 if (debug != null) {
+                    debug.println("Debug info only. No keystore.");
                     e.printStackTrace();
                 }
                 return null;
@@ -260,7 +261,7 @@
                 loaded_one = true;
             } catch (Exception e) {
                 if (debug != null) {
-                    debug.println("error reading policy " + e);
+                    debug.println("Debug info only. Error reading policy " + e);
                     e.printStackTrace();
                 }
                 // ignore that policy
--- a/src/share/classes/sun/security/provider/DSA.java	Thu Jul 19 10:00:38 2018 +0100
+++ b/src/share/classes/sun/security/provider/DSA.java	Fri Jul 20 05:44:14 2018 -0700
@@ -434,18 +434,6 @@
         return printable;
     }
 
-    private static void debug(Exception e) {
-        if (debug) {
-            e.printStackTrace();
-        }
-    }
-
-    private static void debug(String s) {
-        if (debug) {
-            System.err.println(s);
-        }
-    }
-
     /**
      * Standard SHA224withDSA implementation as defined in FIPS186-3.
      */
--- a/src/share/classes/sun/security/provider/PolicyFile.java	Thu Jul 19 10:00:38 2018 +0100
+++ b/src/share/classes/sun/security/provider/PolicyFile.java	Fri Jul 20 05:44:14 2018 -0700
@@ -563,7 +563,8 @@
                             loaded_policy = true;
                     } catch (Exception e) {
                         if (debug != null) {
-                            debug.println("error reading policy "+e);
+                            debug.println(
+                                "Debug info only. Error reading policy " +e);
                             e.printStackTrace();
                         }
                         // ignore that policy
@@ -616,6 +617,7 @@
             } catch (Exception e) {
                 // ignore, treat it like we have no keystore
                 if (debug != null) {
+                    debug.println("Debug info only. Ignoring exception.");
                     e.printStackTrace();
                 }
             }
--- a/src/share/classes/sun/security/util/AnchorCertificates.java	Thu Jul 19 10:00:38 2018 +0100
+++ b/src/share/classes/sun/security/util/AnchorCertificates.java	Fri Jul 20 05:44:14 2018 -0700
@@ -75,8 +75,8 @@
                 } catch (Exception e) {
                     if (debug != null) {
                         debug.println("Error parsing cacerts");
+                        e.printStackTrace();
                     }
-                    e.printStackTrace();
                 }
                 return null;
             }
--- a/src/share/classes/sun/security/util/SignatureFileVerifier.java	Thu Jul 19 10:00:38 2018 +0100
+++ b/src/share/classes/sun/security/util/SignatureFileVerifier.java	Fri Jul 20 05:44:14 2018 -0700
@@ -380,8 +380,9 @@
                     if (e.getMessage() != null) {
                         debug.println(key + ":  " + e.getMessage());
                     } else {
-                        debug.println(key + ":  " + algorithm +
-                                " was disabled, no exception msg given.");
+                        debug.println("Debug info only. " +  key + ":  " +
+                            algorithm +
+                            " was disabled, no exception msg given.");
                         e.printStackTrace();
                     }
                 }
--- a/src/share/classes/sun/security/x509/CertificateExtensions.java	Thu Jul 19 10:00:38 2018 +0100
+++ b/src/share/classes/sun/security/x509/CertificateExtensions.java	Fri Jul 20 05:44:14 2018 -0700
@@ -124,7 +124,8 @@
                 unparseableExtensions.put(ext.getExtensionId().toString(),
                         new UnparseableExtension(ext, e));
                 if (debug != null) {
-                    debug.println("Error parsing extension: " + ext);
+                    debug.println("Debug info only." +
+                       " Error parsing extension: " + ext);
                     e.printStackTrace();
                     HexDumpEncoder h = new HexDumpEncoder();
                     System.err.println(h.encodeBuffer(ext.getExtensionValue()));
--- a/src/share/classes/sun/security/x509/X509Key.java	Thu Jul 19 10:00:38 2018 +0100
+++ b/src/share/classes/sun/security/x509/X509Key.java	Fri Jul 20 05:44:14 2018 -0700
@@ -393,7 +393,6 @@
                 throw new InvalidKeyException ("excess key data");
 
         } catch (IOException e) {
-            // e.printStackTrace ();
             throw new InvalidKeyException("IOException: " +
                                           e.getMessage());
         }
--- a/src/solaris/classes/sun/awt/X11/XRobotPeer.java	Thu Jul 19 10:00:38 2018 +0100
+++ b/src/solaris/classes/sun/awt/X11/XRobotPeer.java	Fri Jul 20 05:44:14 2018 -0700
@@ -34,6 +34,10 @@
 
 class XRobotPeer implements RobotPeer {
 
+    static {
+        loadNativeLibraries();
+    }
+
     private X11GraphicsConfig   xgc = null;
     /*
      * native implementation uses some static shared data (pipes, processes)
@@ -98,4 +102,5 @@
     private static native synchronized void keyReleaseImpl(int keycode);
 
     private static native synchronized void getRGBPixelsImpl(X11GraphicsConfig xgc, int x, int y, int width, int height, int pixelArray[]);
+    private static native void loadNativeLibraries();
 }
--- a/src/solaris/native/sun/awt/awt_Robot.c	Thu Jul 19 10:00:38 2018 +0100
+++ b/src/solaris/native/sun/awt/awt_Robot.c	Fri Jul 20 05:44:14 2018 -0700
@@ -27,6 +27,9 @@
     #error This file should not be included in headless library
 #endif
 
+#include "jvm_md.h"
+#include <dlfcn.h>
+
 #include "awt_p.h"
 #include "awt_GraphicsEnv.h"
 #define XK_MISCELLANY
@@ -49,11 +52,46 @@
 #include <sys/socket.h>
 #endif
 
+static Bool   (*compositeQueryExtension)   (Display*, int*, int*);
+static Status (*compositeQueryVersion)     (Display*, int*, int*);
+static Window (*compositeGetOverlayWindow) (Display *, Window);
+
 extern struct X11GraphicsConfigIDs x11GraphicsConfigIDs;
 
 static jint * masks;
 static jint num_buttons;
 
+static void *xCompositeHandle;
+
+static const char* XCOMPOSITE = JNI_LIB_NAME("Xcomposite");
+static const char* XCOMPOSITE_VERSIONED = VERSIONED_JNI_LIB_NAME("Xcomposite", "1");
+
+static Bool checkXCompositeFunctions(void) {
+    return (compositeQueryExtension   != NULL   &&
+            compositeQueryVersion     != NULL   &&
+            compositeGetOverlayWindow != NULL);
+}
+
+static void initXCompositeFunctions(void) {
+
+    if (xCompositeHandle == NULL) {
+        xCompositeHandle = dlopen(XCOMPOSITE, RTLD_LAZY | RTLD_GLOBAL);
+        if (xCompositeHandle == NULL) {
+            xCompositeHandle = dlopen(XCOMPOSITE_VERSIONED, RTLD_LAZY | RTLD_GLOBAL);
+        }
+    }
+    //*(void **)(&asyncGetCallTraceFunction)
+    if (xCompositeHandle != NULL) {
+        *(void **)(&compositeQueryExtension) = dlsym(xCompositeHandle, "XCompositeQueryExtension");
+        *(void **)(&compositeQueryVersion) = dlsym(xCompositeHandle, "XCompositeQueryVersion");
+        *(void **)(&compositeGetOverlayWindow) = dlsym(xCompositeHandle, "XCompositeGetOverlayWindow");
+    }
+
+    if (xCompositeHandle && !checkXCompositeFunctions()) {
+        dlclose(xCompositeHandle);
+    }
+}
+
 static int32_t isXTestAvailable() {
     int32_t major_opcode, first_event, first_error;
     int32_t  event_basep, error_basep, majorp, minorp;
@@ -88,6 +126,35 @@
     return isXTestAvailable;
 }
 
+static Bool hasXCompositeOverlayExtension(Display *display) {
+
+    int xoverlay = False;
+    int eventBase, errorBase;
+    if (checkXCompositeFunctions() &&
+        compositeQueryExtension(display, &eventBase, &errorBase))
+    {
+        int major = 0;
+        int minor = 0;
+
+        compositeQueryVersion(display, &major, &minor);
+        if (major > 0 || minor >= 3) {
+            xoverlay = True;
+        }
+    }
+
+    return xoverlay;
+}
+
+static jboolean isXCompositeDisplay(Display *display, int screenNumber) {
+
+    char NET_WM_CM_Sn[25];
+    snprintf(NET_WM_CM_Sn, sizeof(NET_WM_CM_Sn), "_NET_WM_CM_S%d\0", screenNumber);
+
+    Atom managerSelection = XInternAtom(display, NET_WM_CM_Sn, 0);
+    Window owner = XGetSelectionOwner(display, managerSelection);
+
+    return owner != 0;
+}
 
 static XImage *getWindowImage(Display * display, Window window,
                               int32_t x, int32_t y,
@@ -232,6 +299,12 @@
     DASSERT(adata != NULL);
 
     rootWindow = XRootWindow(awt_display, adata->awt_visInfo.screen);
+    if (hasXCompositeOverlayExtension(awt_display) &&
+        isXCompositeDisplay(awt_display, adata->awt_visInfo.screen))
+    {
+        rootWindow = compositeGetOverlayWindow(awt_display, rootWindow);
+    }
+
     image = getWindowImage(awt_display, rootWindow, x, y, width, height);
 
     /* Array to use to crunch around the pixel values */
@@ -412,3 +485,8 @@
 
     AWT_UNLOCK();
 }
+
+JNIEXPORT void JNICALL
+Java_sun_awt_X11_XRobotPeer_loadNativeLibraries (JNIEnv *env, jclass cls) {
+    initXCompositeFunctions();
+}