You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by re...@apache.org on 2009/07/24 11:48:01 UTC

svn commit: r797395 - /harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/commands/ThreadReference.cpp

Author: regisxu
Date: Fri Jul 24 09:48:00 2009
New Revision: 797395

URL: http://svn.apache.org/viewvc?rev=797395&view=rev
Log:
Apply patch for HARMONY-6284: [JDWP][Java6] The capability of HCR should be checked in case selective debug is enabled

Modified:
    harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/commands/ThreadReference.cpp

Modified: harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/commands/ThreadReference.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/commands/ThreadReference.cpp?rev=797395&r1=797394&r2=797395&view=diff
==============================================================================
--- harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/commands/ThreadReference.cpp (original)
+++ harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/commands/ThreadReference.cpp Fri Jul 24 09:48:00 2009
@@ -269,18 +269,40 @@
         }
 #endif
         
-        jboolean isObsolete;
-        JVMTI_TRACE(LOG_DEBUG, err, jvmti->IsMethodObsolete(frame_buffer[j].method, &isObsolete));
-
         // we should return 0 as the methodID for obsolete method.
-        if(isObsolete) {	 
+
+        jvmtiCapabilities caps;
+        memset(&caps, 0, sizeof(caps));
+
+        JVMTI_TRACE(LOG_DEBUG, err, jvmti->GetCapabilities(&caps));
+        if (err != JVMTI_ERROR_NONE) {
+            JDWP_TRACE(LOG_RELEASE, (LOG_INFO_FL, "Unable to get capabilities: %d", err));
+            return err;
+        }
+       // When selective debug is enabled, HCR is not allowed. So we need to check if HCR is disabled first before invoking IsMethodObsolete.
+       // If so, just return the methodID directly.
+        if(caps.can_redefine_classes != 1) {
             m_cmdParser->reply.WriteLocation(jni, typeTag,
-                        declaring_class, 0,
+                        declaring_class, frame_buffer[j].method,
                         frame_buffer[j].location);
-        } else {
-            m_cmdParser->reply.WriteLocation(jni, typeTag,
+        }else {
+            jboolean isObsolete;
+            JVMTI_TRACE(LOG_DEBUG, err, jvmti->IsMethodObsolete(frame_buffer[j].method, &isObsolete));
+            if (err != JVMTI_ERROR_NONE) {
+                JDWP_TRACE(LOG_RELEASE, (LOG_INFO_FL, "Frames: IsMethodObsolete return error code: %d", err));
+                return err;
+            }
+            if(isObsolete) {
+                JDWP_TRACE(LOG_RELEASE, (LOG_DATA_FL, "Frames: the method is obsolete: frame#=%d, loc=%lld, methodID=%p, classID=%p, typeTag=%d",
+                            j, frame_buffer[j].location, frame_buffer[j].method, declaring_class, typeTag));
+                m_cmdParser->reply.WriteLocation(jni, typeTag,
+                            declaring_class, 0,
+                            frame_buffer[j].location);
+            }else {
+                m_cmdParser->reply.WriteLocation(jni, typeTag,
                         declaring_class, frame_buffer[j].method,
                         frame_buffer[j].location);
+            }
         }
     }