changeset 4261:d2081a1f417f

7045174: Most of the tests in awt area fails with jdk 7b142 on windows with -Xcheck:jni Reviewed-by: art, denis
author bagiras
date Fri, 27 May 2011 11:45:08 +0400
parents efbf75c24b0f
children 000a845b1e38
files src/windows/native/sun/windows/awt_Object.cpp src/windows/native/sun/windows/awt_Toolkit.cpp
diffstat 2 files changed, 7 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/windows/native/sun/windows/awt_Object.cpp	Wed May 18 18:18:04 2011 -0700
+++ b/src/windows/native/sun/windows/awt_Object.cpp	Fri May 27 11:45:08 2011 +0400
@@ -69,9 +69,12 @@
 
     CriticalSection::Lock l(AwtToolkit::GetInstance().GetSyncCS());
 
+    JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
+    jobject selfGlobalRef = env->NewGlobalRef(self);
+
     // value 0 of lParam means that we should not attempt to enter the
     // SyncCall critical section, as it was entered someshere earlier
-    AwtToolkit::GetInstance().SendMessage(WM_AWT_DISPOSE, (WPARAM)self, (LPARAM)0);
+    AwtToolkit::GetInstance().SendMessage(WM_AWT_DISPOSE, (WPARAM)selfGlobalRef, (LPARAM)0);
 
     CATCH_BAD_ALLOC;
 }
--- a/src/windows/native/sun/windows/awt_Toolkit.cpp	Wed May 18 18:18:04 2011 -0700
+++ b/src/windows/native/sun/windows/awt_Toolkit.cpp	Fri May 27 11:45:08 2011 +0400
@@ -741,7 +741,9 @@
           }
           if (canDispose) {
               if(wParam != NULL) {
-                  AwtObject *o = (AwtObject *) JNI_GET_PDATA((jobject)wParam);
+                  jobject self = (jobject)wParam;
+                  AwtObject *o = (AwtObject *) JNI_GET_PDATA(self);
+                  env->DeleteGlobalRef(self);
                   if(o != NULL && theAwtObjectList.Remove(o)) {
                       o->Dispose();
                   }