6610244: modal dialog closes with fatal error if -Xcheck:jni is set
Obtain WWindowPeer class every time it is required Reviewed-by: art
This commit is contained in:
parent
87e915d1af
commit
88699393d7
jdk
src/windows/native/sun/windows
test/java/awt/Dialog/CrashXCheckJni
@ -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 @@ void AwtDialog::ModalActivateNextWindow(HWND dialogHWnd,
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
@ -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::warningStringID;
|
||||
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 @@ Java_sun_awt_windows_WWindowPeer_initIDs(JNIEnv *env, jclass cls)
|
||||
{
|
||||
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");
|
||||
|
@ -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 @@ public:
|
||||
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;
|
||||
|
64
jdk/test/java/awt/Dialog/CrashXCheckJni/CrashXCheckJni.java
Normal file
64
jdk/test/java/awt/Dialog/CrashXCheckJni/CrashXCheckJni.java
Normal file
@ -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();
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user