# HG changeset patch # User dav # Date 1206447363 -10800 # Node ID 6cc660c2043146d7cb3576fabdce9c7b77e3bf23 # Parent b7466e0d720d7016394ccb5681d4082ce0d6ecf9 6610244: modal dialog closes with fatal error if -Xcheck:jni is set Summary: obtain WWindowPeer class every time it is required Reviewed-by: art diff -r b7466e0d720d -r 6cc660c20431 jdk/src/windows/native/sun/windows/awt_Dialog.cpp --- a/jdk/src/windows/native/sun/windows/awt_Dialog.cpp Mon Mar 24 18:24:15 2008 +0300 +++ b/jdk/src/windows/native/sun/windows/awt_Dialog.cpp Tue Mar 25 15:16:03 2008 +0300 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2008 Sun Microsystems, Inc. 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 @@ -428,8 +428,12 @@ { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); - jlongArray windows = (jlongArray)(env->CallStaticObjectMethod(AwtWindow::wwindowPeerCls, - AwtWindow::getActiveWindowsMID)); + jclass wwindowPeerCls = env->FindClass("sun/awt/windows/WWindowPeer"); + jmethodID getActiveWindowsMID = env->GetStaticMethodID(wwindowPeerCls, + "getActiveWindowHandles", "()[J"); + DASSERT(getActiveWindowsMID != NULL); + jlongArray windows = (jlongArray)(env->CallStaticObjectMethod(wwindowPeerCls, + getActiveWindowsMID)); if (windows == NULL) { return; } diff -r b7466e0d720d -r 6cc660c20431 jdk/src/windows/native/sun/windows/awt_Window.cpp --- a/jdk/src/windows/native/sun/windows/awt_Window.cpp Mon Mar 24 18:24:15 2008 +0300 +++ b/jdk/src/windows/native/sun/windows/awt_Window.cpp Tue Mar 25 15:16:03 2008 +0300 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2008 Sun Microsystems, Inc. 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 @@ -122,9 +122,6 @@ jfieldID AwtWindow::locationByPlatformID; jfieldID AwtWindow::autoRequestFocusID; -jclass AwtWindow::wwindowPeerCls; -jmethodID AwtWindow::getActiveWindowsMID; - jfieldID AwtWindow::sysXID; jfieldID AwtWindow::sysYID; jfieldID AwtWindow::sysWID; @@ -2159,11 +2156,6 @@ { TRY; - AwtWindow::wwindowPeerCls = cls; - AwtWindow::getActiveWindowsMID = - env->GetStaticMethodID(cls, "getActiveWindowHandles", "()[J"); - DASSERT(AwtWindow::getActiveWindowsMID != NULL); - AwtWindow::sysXID = env->GetFieldID(cls, "sysX", "I"); AwtWindow::sysYID = env->GetFieldID(cls, "sysY", "I"); AwtWindow::sysWID = env->GetFieldID(cls, "sysW", "I"); diff -r b7466e0d720d -r 6cc660c20431 jdk/src/windows/native/sun/windows/awt_Window.h --- a/jdk/src/windows/native/sun/windows/awt_Window.h Mon Mar 24 18:24:15 2008 +0300 +++ b/jdk/src/windows/native/sun/windows/awt_Window.h Tue Mar 25 15:16:03 2008 +0300 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2008 Sun Microsystems, Inc. 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 @@ -57,11 +57,6 @@ static jfieldID screenID; /* screen number passed over from WindowPeer */ static jfieldID autoRequestFocusID; - /* WWindowPeer class */ - static jclass wwindowPeerCls; - /* long[] getActiveWindowHandles() method in WWindowPeer */ - static jmethodID getActiveWindowsMID; - // The coordinates at the peer. static jfieldID sysXID; static jfieldID sysYID; diff -r b7466e0d720d -r 6cc660c20431 jdk/test/java/awt/Dialog/CrashXCheckJni/CrashXCheckJni.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/Dialog/CrashXCheckJni/CrashXCheckJni.java Tue Mar 25 15:16:03 2008 +0300 @@ -0,0 +1,64 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. 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. + * + * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + @test + @bug 6610244 + @library ../../regtesthelpers + @build Util Sysout AbstractTest + @summary modal dialog closes with fatal error if -Xcheck:jni is set + @author Andrei Dmitriev : area=awt.dialog + @run main/othervm -Xcheck:jni CrashXCheckJni +*/ + +import java.awt.*; +import java.awt.event.*; +import java.util.Timer; +import java.util.TimerTask; +import test.java.awt.regtesthelpers.Util; +import test.java.awt.regtesthelpers.AbstractTest; +import test.java.awt.regtesthelpers.Sysout; + +public class CrashXCheckJni { + + public static void main(String []s) + { + final Dialog fd = new Dialog(new Frame(), true); + Timer t = new Timer(); + t.schedule(new TimerTask() { + + public void run() { + System.out.println("RUNNING TASK"); + fd.setVisible(false); + fd.dispose(); + System.out.println("FINISHING TASK"); + } + }, 3000L); + + fd.setVisible(true); + t.cancel(); + Util.waitForIdle(null); + + AbstractTest.pass(); + } +}