7191018: Manual test closed/java/awt/JAWT causes JVM to crash starting from JDK 5
authoralitvinov
Thu, 15 Aug 2013 14:20:09 +0400
changeset 19366 5286ad9a6ff2
parent 19365 9b91cc0d659c
child 19367 0589099a8188
7191018: Manual test closed/java/awt/JAWT causes JVM to crash starting from JDK 5 Reviewed-by: anthony, serb
jdk/src/solaris/native/sun/awt/awt_DrawingSurface.c
--- a/jdk/src/solaris/native/sun/awt/awt_DrawingSurface.c	Thu Aug 15 01:17:30 2013 +0400
+++ b/jdk/src/solaris/native/sun/awt/awt_DrawingSurface.c	Thu Aug 15 14:20:09 2013 +0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2013, 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
@@ -346,13 +346,19 @@
     awt_GetComponent(JNIEnv* env, void* platformInfo)
 {
     Window window = (Window)platformInfo;
-    Widget widget = NULL;
     jobject peer = NULL;
     jobject target = NULL;
 
     AWT_LOCK();
 
-    target =  (*env)->GetObjectField(env, peer, targetID);
+    if (window != None) {
+        peer = JNU_CallStaticMethodByName(env, NULL, "sun/awt/X11/XToolkit",
+            "windowToXWindow", "(J)Lsun/awt/X11/XBaseWindow;", (jlong)window).l;
+    }
+    if ((peer != NULL) &&
+        (JNU_IsInstanceOfByName(env, peer, "sun/awt/X11/XWindow") == 1)) {
+        target = (*env)->GetObjectField(env, peer, targetID);
+    }
 
     if (target == NULL) {
         JNU_ThrowNullPointerException(env, "NullPointerException");
@@ -360,7 +366,6 @@
         return (jobject)NULL;
     }
 
-
     AWT_UNLOCK();
 
     return target;