You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by od...@apache.org on 2009/07/16 17:57:41 UTC

svn commit: r794726 [9/15] - in /harmony/enhanced/jdktools/branches/java6/modules/jpda: ./ src/main/native/include/ src/main/native/jdwp/common/agent/commands/ src/main/native/jdwp/common/agent/core/ src/main/native/jdwp/common/generic/ src/main/native...

Modified: harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/ObjectManager.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/ObjectManager.cpp?rev=794726&r1=794725&r2=794726&view=diff
==============================================================================
--- harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/ObjectManager.cpp (original)
+++ harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/ObjectManager.cpp Thu Jul 16 15:57:37 2009
@@ -16,16 +16,7 @@
  *  limitations under the License.
  */
 
-/**
- * @author Anatoly F. Bondarenko
- * @version $Revision: 1.17 $
- */
-
-// ObjectManager.cpp - implementation of 'class ObjectManager :public AgentBase'
 // Provide mapping between JDWP IDs and corresponding JVMTI, JNI data types
-
-#include <string.h>
-
 #include "jni.h"
 #include "jvmti.h"
 #include "jdwp.h"
@@ -33,11 +24,13 @@
 #include "AgentBase.h"
 #include "AgentEnv.h"
 #include "MemoryManager.h"
-#include "AgentException.h"
+#include "ExceptionManager.h"
 #include "Log.h"
 
 #include "ObjectManager.h"
 
+#include <string.h>
+
 using namespace jdwp;
 
 // =============================================================================
@@ -64,19 +57,56 @@
 const ObjectID FREE_OBJECTID_SIGN = -1;
 const ObjectID OBJECTID_MINIMUM = 1;
 
-ObjectID ObjectManager::MapToObjectID(JNIEnv* JNIEnvPtr, jobject jvmObject) throw (AgentException) {
-    JDWP_TRACE_ENTRY("MapToObjectID(" << JNIEnvPtr << ',' << jvmObject << ')');
+jboolean ObjectManager::FindObjectID(JNIEnv* JNIEnvPtr, jobject jvmObject, ObjectID objectID) {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "FindObjectID(%p,%p,%lld)", JNIEnvPtr, jvmObject, objectID));
 
     if (jvmObject == NULL) {
-        JDWP_TRACE_MAP("## MapToObjectID: map NULL jobject");
+        JDWP_TRACE(LOG_RELEASE, (LOG_DATA_FL, "## FindObjectID: find NULL jobject"));
+        return false;
+    }
+
+    // get object HASH CODE
+    jint hashCode = -1;
+    if (GetObjectHashCode(jvmObject, &hashCode) != JVMTI_ERROR_NONE) {
+        JDWP_TRACE(LOG_RELEASE, (LOG_DATA_FL, "## FindObjectID: GetObjectHashCode failed"));
+        return false;
+    }
+
+    // get HASH INDEX
+    size_t idx = size_t(hashCode) & HASH_TABLE_MSK;
+
+     // LOCK objectID table
+    MonitorAutoLock objectIDTableLock(m_objectIDTableMonitor JDWP_FILE_LINE);
+
+    // find EXISTING objectID
+    ObjectIDItem* objectIDItem = m_objectIDTable[idx];
+    ObjectIDItem* objectIDItemEnd = objectIDItem + m_maxAllocatedObjectID[idx];
+    while (objectIDItem != objectIDItemEnd) {
+        if (objectIDItem->objectID != FREE_OBJECTID_SIGN &&
+            JNIEnvPtr->IsSameObject(objectIDItem->mapObjectIDItem.jvmObject, jvmObject) == JNI_TRUE &&
+            objectID == objectIDItem->objectID) {
+            JDWP_TRACE(LOG_RELEASE, (LOG_DATA_FL, "FindObjectID: find object, it is a valid object id"));
+            return true;
+        }
+        objectIDItem++;
+    }
+    return false;
+}
+
+
+ObjectID ObjectManager::MapToObjectID(JNIEnv* JNIEnvPtr, jobject jvmObject) {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "MapToObjectID(%p,%p)", JNIEnvPtr, jvmObject));
+
+    if (jvmObject == NULL) {
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## MapToObjectID: map NULL jobject"));
         return JDWP_OBJECT_ID_NULL;
     }
 
     // get object HASH CODE
     jint hashCode = -1;
     if (GetObjectHashCode(jvmObject, &hashCode) != JVMTI_ERROR_NONE) {
-        JDWP_TRACE_MAP("## MapToObjectID: GetObjectHashCode failed");
-        throw AgentException(JDWP_ERROR_INVALID_OBJECT);
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## MapToObjectID: GetObjectHashCode failed"));
+        return JDWP_OBJECT_ID_NULL;
     }
 
     // get HASH INDEX
@@ -112,8 +142,8 @@
              *   suppose just this case is here
             */
             JNIEnvPtr->ExceptionClear();
-            JDWP_TRACE_MAP("## MapToObjectID: NewWeakGlobalRef returned NULL");
-            throw OutOfMemoryException();
+            JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## MapToObjectID: NewWeakGlobalRef returned NULL"));
+            return JDWP_OBJECT_ID_NULL;
         }
         if (m_freeObjectIDItems[idx] == NULL) {
             // expand table
@@ -148,8 +178,8 @@
     return objectID;
 } // MapToObjectID()
 
-jobject ObjectManager::MapFromObjectID(JNIEnv* JNIEnvPtr, ObjectID objectID) throw (AgentException) {
-    JDWP_TRACE_ENTRY("MapFromObjectID(" << JNIEnvPtr << ',' << objectID << ')');
+jobject ObjectManager::MapFromObjectID(JNIEnv* JNIEnvPtr, ObjectID objectID) {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "MapFromObjectID(%p,%lld)", JNIEnvPtr, objectID));
 
     // decode object ID
     size_t idx = (size_t)objectID & HASH_TABLE_MSK;
@@ -158,8 +188,8 @@
     // check decoded object ID
     if (objectID <= 0 || objectID > m_maxAllocatedObjectID[idx]) {
         // It is DEBUGGER ERROR: request for ObjectID which was never allocated
-        JDWP_TRACE_MAP("## MapFromObjectID: invalid object ID: " << objectID);
-        throw AgentException(JDWP_ERROR_INVALID_OBJECT);
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## MapFromObjectID: invalid object ID: %lld", objectID));
+        return NULL;
     }
 
     // take object from table
@@ -170,8 +200,8 @@
     ObjectIDItem* objectIDItem = m_objectIDTable[idx] + objectID - 1;
     if (objectIDItem->objectID == FREE_OBJECTID_SIGN) {
         // It is DEBUGGER ERROR: Corresponding jobject is DISPOSED
-        JDWP_TRACE_MAP("## MapFromObjectID: corresponding jobject has been disposed: " << objectID);
-        throw AgentException(JDWP_ERROR_INVALID_OBJECT);
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## MapFromObjectID: corresponding jobject has been disposed: %lld", objectID));
+        return NULL;
     }
     jvmObject = objectIDItem->mapObjectIDItem.jvmObject;
     } // synchronized block: objectIDTableLock
@@ -179,15 +209,15 @@
     // Check if corresponding jobject has been Garbage collected*/
     if (JNIEnvPtr->IsSameObject(jvmObject, NULL) == JNI_TRUE) {
         // Corresponding jobject is Garbage collected
-        JDWP_TRACE_MAP("## MapFromObjectID: corresponding jobject has been Garbage collected: " << objectID);
-        throw AgentException(JDWP_ERROR_INVALID_OBJECT);
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## MapFromObjectID: corresponding jobject has been Garbage collected: %lld", objectID));
+        return NULL;
     }
 
     return jvmObject;
 } // MapFromObjectID()
 
-jboolean ObjectManager::IsValidObjectID(ObjectID objectID) throw () {
-    JDWP_TRACE_ENTRY("IsValidObjectID(" << objectID << ')');
+jboolean ObjectManager::IsValidObjectID(JNIEnv* JNIEnvPtr,ObjectID objectID) {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "IsValidObjectID(%lld)", objectID));
 
     // decode object ID
     size_t idx = (size_t)objectID & HASH_TABLE_MSK;
@@ -199,20 +229,29 @@
         return JNI_FALSE;
     }
 
+    jobject jvmObject;
     { // synchronized block: objectIDTableLock
         MonitorAutoLock objectIDTableLock(m_objectIDTableMonitor JDWP_FILE_LINE);
         ObjectIDItem* objectIDItem = m_objectIDTable[idx] + objectID - 1;
         if (objectIDItem->objectID == FREE_OBJECTID_SIGN) {
-        // this ObjectID is DISPOSED
+            // this ObjectID is DISPOSED
+            return JNI_FALSE;
+        }
+        jvmObject = objectIDItem->mapObjectIDItem.jvmObject;
+    } // synchronized block: objectIDTableLock
+    
+    // Check if corresponding jobject has been Garbage collected*/
+    if (JNIEnvPtr->IsSameObject(jvmObject, NULL) == JNI_TRUE) {
+        // Corresponding jobject is Garbage collected
+        JDWP_TRACE(LOG_RELEASE, (LOG_DATA_FL, "## IsValidObjectID: corresponding jobject has been Garbage collected: %lld", objectID));
         return JNI_FALSE;
     }
-    } // synchronized block: objectIDTableLock
-
+        
     return JNI_TRUE;
 } // IsValidObjectID() 
 
-void ObjectManager::DisableCollection(JNIEnv* JNIEnvPtr, ObjectID objectID) throw (AgentException) {
-    JDWP_TRACE_ENTRY("DisableCollection(" << JNIEnvPtr << ',' << objectID << ')');
+int ObjectManager::DisableCollection(JNIEnv* JNIEnvPtr, ObjectID objectID) {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "DisableCollection(%p,%lld)", JNIEnvPtr, objectID));
 
     // decode object ID
     size_t idx = (size_t)objectID & HASH_TABLE_MSK;
@@ -221,8 +260,10 @@
     // check decoded object ID
     if (objectID <= 0 || objectID > m_maxAllocatedObjectID[idx]) {
         // It is DEBUGGER ERROR: request for ObjectID which was never allocated
-        JDWP_TRACE_MAP("## DisableCollection: invalid object ID: " << objectID);
-        throw AgentException(JDWP_ERROR_INVALID_OBJECT);
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## DisableCollection: invalid object ID: %lld", objectID));
+        AgentException ex(JDWP_ERROR_INVALID_OBJECT);
+        JDWP_SET_EXCEPTION(ex);
+        return JDWP_ERROR_INVALID_OBJECT;
     }
 
     { // synchronized block: objectIDTableLock
@@ -230,36 +271,43 @@
         ObjectIDItem* objectIDItem = m_objectIDTable[idx] + objectID - 1;
         if (objectIDItem->objectID == FREE_OBJECTID_SIGN) {
             // It is DEBUGGER ERROR: Corresponding jobject is DISPOSED
-            JDWP_TRACE_MAP("## DisableCollection: corresponding jobject has been disposed: " << objectID);
-            throw AgentException(JDWP_ERROR_INVALID_OBJECT);
+            JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## DisableCollection: corresponding jobject has been disposed: %lld", objectID));
+            AgentException ex(JDWP_ERROR_INVALID_OBJECT);
+            JDWP_SET_EXCEPTION(ex);
+            return JDWP_ERROR_INVALID_OBJECT;
         }
     
         jobject jvmObject = objectIDItem->mapObjectIDItem.jvmObject;
         if (JNIEnvPtr->IsSameObject(jvmObject, NULL) == JNI_TRUE) {
             // Corresponding jobject is Garbage collected
-            JDWP_TRACE_MAP("## DisableCollection: corresponding jobject has been Garbage collected: " << objectID);
-            throw AgentException(JDWP_ERROR_INVALID_OBJECT);
+            JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## DisableCollection: corresponding jobject has been Garbage collected: %lld", objectID));
+            AgentException ex(JDWP_ERROR_INVALID_OBJECT);
+            JDWP_SET_EXCEPTION(ex);
+            return JDWP_ERROR_INVALID_OBJECT;
         }
         if (objectIDItem->mapObjectIDItem.globalRefKind == NORMAL_GLOBAL_REF) {
             // Repeated request for DisableCollection
-            JDWP_TRACE_MAP("<= DisableCollection: corresponding jobject has a global reference");
-            return;
+            JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "<= DisableCollection: corresponding jobject has a global reference"));
+            return JDWP_ERROR_NONE;
         }
     
         jobject newGlobRef = JNIEnvPtr->NewGlobalRef(jvmObject);
         if (newGlobRef == NULL) {
-            JDWP_TRACE_MAP("## DisableCollection: NewGlobalRef returned NULL");
-            throw OutOfMemoryException();
+            JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## DisableCollection: NewGlobalRef returned NULL"));
+            AgentException ex(JDWP_ERROR_OUT_OF_MEMORY);
+            JDWP_SET_EXCEPTION(ex);
+            return JDWP_ERROR_OUT_OF_MEMORY;
         }
-        JNIEnvPtr->DeleteWeakGlobalRef(jvmObject);
+        JNIEnvPtr->DeleteWeakGlobalRef((jweak)jvmObject);
         objectIDItem->mapObjectIDItem.globalRefKind = NORMAL_GLOBAL_REF;
         objectIDItem->mapObjectIDItem.jvmObject = newGlobRef;
     } // synchronized block: objectIDTableLock
 
+    return JDWP_ERROR_NONE;
 } // DisableCollection() 
 
-void ObjectManager::EnableCollection(JNIEnv* JNIEnvPtr, ObjectID objectID) throw (AgentException) {
-    JDWP_TRACE_ENTRY("EnableCollection(" << JNIEnvPtr << ',' << objectID << ')');
+int ObjectManager::EnableCollection(JNIEnv* JNIEnvPtr, ObjectID objectID) {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "EnableCollection(%p,%lld)", JNIEnvPtr, objectID));
 
     // decode object ID
     size_t idx = (size_t)objectID & HASH_TABLE_MSK;
@@ -268,13 +316,13 @@
     // check decoded object ID
     if (objectID <= 0 || objectID > m_maxAllocatedObjectID[idx]) {
         /* It is DEBUGGER ERROR: request for ObjectID which was never allocated
-         * JDWP_TRACE_MAP("## EnableCollection: throw AgentException(JDWP_ERROR_INVALID_OBJECT)#1");
+         * JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## EnableCollection: throw AgentException(JDWP_ERROR_INVALID_OBJECT)#1"));
          * throw AgentException(JDWP_ERROR_INVALID_OBJECT);
          * EnableCollection Command (ObjectReference Command Set) does not 
          * assume INVALID_OBJECT reply - so simply return:
         */
-        JDWP_TRACE_MAP("## EnableCollection: invalid object ID: " << objectID);
-        return;
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## EnableCollection: invalid object ID: %lld", objectID));
+        return JDWP_ERROR_NONE;
     }
 
     { // synchronized block: objectIDTableLock
@@ -286,15 +334,15 @@
              * EnableCollection Command (ObjectReference Command Set) does not 
              * assume INVALID_OBJECT reply - so simply return:
             */
-            JDWP_TRACE_MAP("## EnableCollection: corresponding jobject has been disposed: " << objectID);
-            return;
+            JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## EnableCollection: corresponding jobject has been disposed: %lld", objectID));
+            return JDWP_ERROR_NONE;;
         }
         
         if (objectIDItem->mapObjectIDItem.globalRefKind == WEAK_GLOBAL_REF) {
             // Incorrect request for EnableCollection: 
             // ObjectID is in EnableCollection state
-            JDWP_TRACE_MAP("<= EnableCollection: corresponding jobject has a weak reference");
-            return;
+            JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "<= EnableCollection: corresponding jobject has a weak reference"));
+            return JDWP_ERROR_NONE;;
         }
         
         jobject jvmObject = objectIDItem->mapObjectIDItem.jvmObject;
@@ -306,25 +354,28 @@
             */
             if (JNIEnvPtr->ExceptionCheck() == JNI_TRUE) {
                 JNIEnvPtr->ExceptionClear();
-                JDWP_TRACE_MAP("## EnableCollection: NewWeakGlobalRef returned NULL due to OutOfMemoryException");
-                throw OutOfMemoryException();
+                JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## EnableCollection: NewWeakGlobalRef returned NULL due to OutOfMemoryException"));
+                AgentException ex(JDWP_ERROR_OUT_OF_MEMORY);
+                JDWP_SET_EXCEPTION(ex);
+                return JDWP_ERROR_OUT_OF_MEMORY;
             }
             /* else requested jobject is garbage collected
              * As EnableCollection Command (ObjectReference Command Set) does not 
              * assume INVALID_OBJECT reply - so simply return:
             */
-            JDWP_TRACE_MAP("## EnableCollection: NewWeakGlobalRef returned NULL");
-            return;
+            JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## EnableCollection: NewWeakGlobalRef returned NULL"));
+            return JDWP_ERROR_NONE;
         }
         JNIEnvPtr->DeleteGlobalRef(jvmObject);
         objectIDItem->mapObjectIDItem.globalRefKind = WEAK_GLOBAL_REF;
         objectIDItem->mapObjectIDItem.jvmObject = newWeakGlobRef;
     } // synchronized block: objectIDTableLock
 
+    return JDWP_ERROR_NONE;
 } // EnableCollection()
 
-jboolean ObjectManager::IsCollectionDisabled(ObjectID objectID) throw (AgentException) {
-    JDWP_TRACE_ENTRY("IsCollectionDisabled(" << objectID << ')');
+/*jboolean ObjectManager::IsCollectionDisabled(ObjectID objectID) {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "IsCollectionDisabled(%lld)", objectID));
 
     // decode object ID
     size_t idx = (size_t)objectID & HASH_TABLE_MSK;
@@ -335,8 +386,9 @@
     // check decoded object ID
     if (objectID <= 0 || objectID > m_maxAllocatedObjectID[idx]) {
         // It is DEBUGGER ERROR: request for ObjectID which was never allocated
-        JDWP_TRACE_MAP("## IsCollectionDisabled: invalid object ID: " << objectID);
-        throw AgentException(JDWP_ERROR_INVALID_OBJECT);
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## IsCollectionDisabled: invalid object ID: %lld", objectID));
+	AgentException ex(JDWP_ERROR_INVALID_OBJECT);
+	THROW(ex);
     }
 
     jboolean result;
@@ -345,8 +397,9 @@
     ObjectIDItem* objectIDItem = m_objectIDTable[idx] + objectID - 1;
     if ( objectIDItem->objectID == FREE_OBJECTID_SIGN ) {
         // It is DEBUGGER ERROR: Corresponding jobject is DISPOSED
-        JDWP_TRACE_MAP("## IsCollectionDisabled: corresponding jobject has been disposed: " << objectID);
-        throw AgentException(JDWP_ERROR_INVALID_OBJECT);
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## IsCollectionDisabled: corresponding jobject has been disposed: %lld", objectID));
+	AgentException ex(JDWP_ERROR_INVALID_OBJECT);
+	THROW(ex);
     }
     result = JNI_FALSE;
     if (objectIDItem->mapObjectIDItem.globalRefKind != WEAK_GLOBAL_REF) {
@@ -355,10 +408,10 @@
     } // synchronized block: objectIDTableLock
 
     return result;
-} // IsCollectionDisabled() 
+} // IsCollectionDisabled() */
 
-jboolean ObjectManager::IsCollected(JNIEnv* JNIEnvPtr, ObjectID objectID) throw (AgentException) {
-    JDWP_TRACE_ENTRY("IsCollected(" << JNIEnvPtr << ',' << objectID << ')');
+jboolean ObjectManager::IsCollected(JNIEnv* JNIEnvPtr, ObjectID objectID) {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "IsCollected(%p,%lld)", JNIEnvPtr, objectID));
 
     // decode object ID
     size_t idx = (size_t)objectID & HASH_TABLE_MSK;
@@ -367,8 +420,8 @@
     // check decoded object ID
     if (objectID <= 0 || objectID > m_maxAllocatedObjectID[idx]) {
         // It is DEBUGGER ERROR: request for ObjectID which was never allocated
-        JDWP_TRACE_MAP("## IsCollected: invalid object ID: " << objectID);
-        throw AgentException(JDWP_ERROR_INVALID_OBJECT);
+        JDWP_TRACE(LOG_RELEASE, (LOG_ERROR_FL, "## IsCollected: invalid object ID: %lld", objectID));
+        return JNI_FALSE;
     }
 
     jobject jvmObject;
@@ -378,8 +431,8 @@
     ObjectIDItem* objectIDItem = m_objectIDTable[idx] + objectID - 1;
     if ( objectIDItem->objectID == FREE_OBJECTID_SIGN) {
         // It is DEBUGGER ERROR: Corresponding jobject is DISPOSED
-        JDWP_TRACE_MAP("## IsCollected: corresponding jobject has been disposed: " << objectID);
-        throw AgentException(JDWP_ERROR_INVALID_OBJECT);
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## IsCollected: corresponding jobject has been disposed: %lld", objectID));
+        return JNI_FALSE;
     }
 
     jvmObject = objectIDItem->mapObjectIDItem.jvmObject;
@@ -387,15 +440,15 @@
 
     if (JNIEnvPtr->IsSameObject(jvmObject, NULL) == JNI_TRUE) {
         // Corresponding jobject has been Garbage collected
-        JDWP_TRACE_MAP("<= IsCollected: JNI_TRUE");
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "<= IsCollected: JNI_TRUE"));
         return JNI_TRUE;
     }
 
     return JNI_FALSE;
 } // IsCollected() 
 
-void ObjectManager::DisposeObject(JNIEnv* JNIEnvPtr, ObjectID objectID, jint refCount) throw () {
-    JDWP_TRACE_ENTRY("DisposeObject(" << JNIEnvPtr << ',' << objectID << ',' << refCount << ')');
+void ObjectManager::DisposeObject(JNIEnv* JNIEnvPtr, ObjectID objectID, jint refCount) {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "DisposeObject(%p,%lld,%d)", JNIEnvPtr, objectID, refCount));
 
     // decode object ID
     size_t idx = (size_t)objectID & HASH_TABLE_MSK;
@@ -407,7 +460,7 @@
          * JDWP spec does NOT provide to return reply for this command
          * so do nothing
         */
-        JDWP_TRACE_MAP("## DisposeObject: invalid object ID: " << objectID);
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## DisposeObject: invalid object ID: %lld", objectID));
         return;
     }
 
@@ -417,7 +470,7 @@
         if (objectIDItem->objectID == FREE_OBJECTID_SIGN) {
             // It may be DEBUGGER ERROR: Corresponding jobject has been disposed already
             // - do nothing
-            JDWP_TRACE_MAP("## DisposeObject: corresponding jobject has been disposed: " << objectID);
+            JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## DisposeObject: corresponding jobject has been disposed: %lld", objectID));
             return;
         }
         
@@ -425,7 +478,7 @@
         if (newRefCount > 0) {
             // Still early to dispose ObjectID 
             objectIDItem->mapObjectIDItem.referencesCount = newRefCount;
-            JDWP_TRACE_MAP("<= DisposeObject: still positive ref count: " << newRefCount);
+            JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "<= DisposeObject: still positive ref count: %d", newRefCount));
             return;
         }
         
@@ -433,7 +486,7 @@
         if (objectIDItem->mapObjectIDItem.globalRefKind == NORMAL_GLOBAL_REF) {
             JNIEnvPtr->DeleteGlobalRef(jvmObject);
         } else {
-            JNIEnvPtr->DeleteWeakGlobalRef(jvmObject);
+            JNIEnvPtr->DeleteWeakGlobalRef((jweak)jvmObject);
         }
         objectIDItem->objectID = FREE_OBJECTID_SIGN;
         objectIDItem->nextFreeObjectIDItem = m_freeObjectIDItems[idx];
@@ -442,8 +495,8 @@
 
 } // DisposeObject() 
 
-jint ObjectManager::IncreaseIDRefCount(ObjectID objectID, jint incrementValue) throw () {
-    JDWP_TRACE_ENTRY("IncreaseIDRefCount(" << objectID << ',' << incrementValue << ')');
+jint ObjectManager::IncreaseIDRefCount(ObjectID objectID, jint incrementValue) {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "IncreaseIDRefCount(%lld,%d)", objectID, incrementValue));
 
     // decode object ID
     size_t idx = (size_t)objectID & HASH_TABLE_MSK;
@@ -453,7 +506,7 @@
     JDWP_ASSERT(objectID <= m_maxAllocatedObjectID[idx]);
     if (objectID == JDWP_OBJECT_ID_NULL) {
         // returned objectID is not real - it is possibly, so do nothing:
-        JDWP_TRACE_MAP("## IncreaseIDRefCount: invalid object ID: " << objectID);
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## IncreaseIDRefCount: invalid object ID: %lld", objectID));
         return 0;
     }
 
@@ -463,7 +516,7 @@
          * JDWP spec does NOT provide to return reply for this command
          * so do nothing
         */
-        JDWP_TRACE_MAP("## IncreaseIDRefCount: invalid object ID: " << objectID);
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## IncreaseIDRefCount: invalid object ID: %lld", objectID));
         return 0;
     }
 
@@ -474,7 +527,7 @@
     if (objectIDItem->objectID == FREE_OBJECTID_SIGN) {
         // Corresponding jobject is DISPOSED - unlikely but possibly theoretically
         // so do nothing
-        JDWP_TRACE_MAP("## IncreaseIDRefCount: corresponding jobject has been disposed: " << objectID);
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## IncreaseIDRefCount: corresponding jobject has been disposed: %lld", objectID));
         return 0;
     }
     newRefCount = objectIDItem->mapObjectIDItem.referencesCount + incrementValue;
@@ -484,8 +537,8 @@
     return newRefCount;
 } // IncreaseIDRefCount() 
 
-void ObjectManager::InitObjectIDMap() throw () {
-    JDWP_TRACE_ENTRY("InitObjectIDMap()");
+void ObjectManager::InitObjectIDMap() {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "InitObjectIDMap()"));
 
     memset(m_objectIDTableSize, 0, sizeof(m_objectIDTableSize));
     memset(m_maxAllocatedObjectID, 0, sizeof(m_maxAllocatedObjectID));
@@ -493,8 +546,8 @@
     memset(m_freeObjectIDItems, 0, sizeof(m_freeObjectIDItems));
 } // InitObjectIDMap()
 
-void ObjectManager::ResetObjectIDMap(JNIEnv* JNIEnvPtr) throw (AgentException) {
-    JDWP_TRACE_ENTRY("ResetObjectIDMap(" << JNIEnvPtr << ')');
+void ObjectManager::ResetObjectIDMap(JNIEnv* JNIEnvPtr) {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "ResetObjectIDMap(%p)", JNIEnvPtr));
 
     for (size_t idx = 0; idx < HASH_TABLE_SIZE; idx++) {
         if (m_objectIDTable[idx]) {
@@ -505,7 +558,7 @@
                     if (objectIDItem->mapObjectIDItem.globalRefKind == NORMAL_GLOBAL_REF) {
                         JNIEnvPtr->DeleteGlobalRef(objectIDItem->mapObjectIDItem.jvmObject);
                     } else {
-                        JNIEnvPtr->DeleteWeakGlobalRef(objectIDItem->mapObjectIDItem.jvmObject);
+                        JNIEnvPtr->DeleteWeakGlobalRef((jweak)objectIDItem->mapObjectIDItem.jvmObject);
                     }
                 }
                 objectIDItem++;
@@ -521,23 +574,19 @@
 // Mapping: ReferenceTypeID <-> jclass (=> jobject)
 // Includes JDWP types: referenceTypeID, classID, interfaceID, arrayID
 
-// Constant defining initial value for ReferenceTypeID to be different from
-// ObjectID values
-const ReferenceTypeID REFTYPEID_MINIMUM = 1000000000;
-
-ReferenceTypeID ObjectManager::MapToReferenceTypeID(JNIEnv* JNIEnvPtr, jclass jvmClass) throw (AgentException) {
-    JDWP_TRACE_ENTRY("MapToReferenceTypeID(" << JNIEnvPtr << ',' << jvmClass << ')');
+ReferenceTypeID ObjectManager::MapToReferenceTypeID(JNIEnv* JNIEnvPtr, jclass jvmClass) {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "MapToReferenceTypeID(%p,%p)", JNIEnvPtr, jvmClass));
 
     if (jvmClass == NULL) {
-        JDWP_TRACE_MAP("## MapToReferenceTypeID: map NULL jclass");
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## MapToReferenceTypeID: map NULL jclass"));
         return JDWP_OBJECT_ID_NULL;
     }
 
     // get object HASH CODE
     jint hashCode = -1;
     if (GetObjectHashCode(jvmClass, &hashCode) != JVMTI_ERROR_NONE) {
-        JDWP_TRACE_MAP("## MapToReferenceTypeID: GetObjectHashCode failed");
-        throw AgentException(JDWP_ERROR_INVALID_OBJECT);
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## MapToReferenceTypeID: GetObjectHashCode failed"));
+        return JDWP_OBJECT_ID_NULL;
     }
 
     // get HASH INDEX
@@ -570,8 +619,8 @@
              *   suppose just this case is here
             */
             JNIEnvPtr->ExceptionClear();
-            JDWP_TRACE_MAP("## MapToReferenceTypeID: NewWeakGlobalRef returned NULL due to OutOfMemoryException");
-            throw OutOfMemoryException();
+            JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## MapToReferenceTypeID: NewWeakGlobalRef returned NULL due to OutOfMemoryException"));
+            return JDWP_OBJECT_ID_NULL;
         }
         // expand table if needed
         if (m_refTypeIDTableUsed[idx] == m_refTypeIDTableSize[idx])
@@ -593,8 +642,8 @@
 } // MapToReferenceTypeID() 
 
 jclass ObjectManager::MapFromReferenceTypeID(JNIEnv* JNIEnvPtr,
-                                             ReferenceTypeID refTypeID) throw (AgentException) {
-    JDWP_TRACE_ENTRY("MapFromReferenceTypeID(" << JNIEnvPtr << ',' << refTypeID << ')');
+                                             ReferenceTypeID refTypeID) {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "MapFromReferenceTypeID(%p,%lld)", JNIEnvPtr, refTypeID));
 
     refTypeID-= REFTYPEID_MINIMUM;
     jclass jvmClass;
@@ -611,10 +660,12 @@
 
     // check buffer index
     if (item >= m_refTypeIDTableUsed[idx]) {
-        if ( IsValidObjectID(refTypeID + REFTYPEID_MINIMUM) ) {
-            throw AgentException(JDWP_ERROR_INVALID_CLASS);
+        if ( IsValidObjectID(JNIEnvPtr, refTypeID + REFTYPEID_MINIMUM) ) {
+            JDWP_TRACE(LOG_RELEASE, (LOG_ERROR_FL, "## MapFromReferenceTypeID: class is invalid"));
+            return NULL;
         } else {
-            throw AgentException(JDWP_ERROR_INVALID_OBJECT);
+            JDWP_TRACE(LOG_RELEASE, (LOG_ERROR_FL, "## MapFromReferenceTypeID: object is invalid"));
+            return NULL;
         }
     }
 
@@ -622,30 +673,65 @@
 
     // check if corresponding jclass has been Garbage collected
     if (JNIEnvPtr->IsSameObject(jvmClass, NULL) == JNI_TRUE) {
-        JDWP_TRACE_MAP("## MapFromReferenceTypeID: corresponding jclass has been Garbage collected");
-        throw AgentException(JDWP_ERROR_INVALID_CLASS);
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## MapFromReferenceTypeID: corresponding jclass has been Garbage collected"));
+        return NULL;
     }
 
     } // UNLOCK ReferenceTypeID table
 
     return jvmClass;
-} // MapFromReferenceTypeID() 
+} // MapFromReferenceTypeID()
+
+jboolean ObjectManager::IsValidReferenceTypeID(JNIEnv* JNIEnvPtr,ObjectID refTypeID) {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "IsValidReferenceTypeID(%p,%lld)", JNIEnvPtr, refTypeID));
+
+    refTypeID-= REFTYPEID_MINIMUM;
+    jclass jvmClass;
+
+    { // LOCK ReferenceTypeID table
+        
+    MonitorAutoLock refTypeIDTableLock(m_refTypeIDTableMonitor JDWP_FILE_LINE);
+
+    // calculate hash index
+    // masking guarantees the index will be in the range [0..HASH_TABLE_SIZE-1]
+    size_t idx = (size_t)refTypeID & HASH_TABLE_MSK;
 
-void ObjectManager::InitRefTypeIDMap() throw () {
-    JDWP_TRACE_ENTRY("InitRefTypeIDMap()");
+    // calculate buffer index
+    size_t item = (size_t)refTypeID >> HASH_TABLE_IDX;
+
+    // check buffer index
+    if (item < 0 || item >= m_refTypeIDTableUsed[idx]) {
+        return JNI_FALSE;
+    }
+
+    jvmClass = m_refTypeIDTable[idx][item];
+
+    // check if corresponding jclass has been Garbage collected
+    if (JNIEnvPtr->IsSameObject(jvmClass, NULL) == JNI_TRUE) {
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## MapFromReferenceTypeID: corresponding jclass has been Garbage collected"));
+        return JNI_FALSE;
+    }
+
+    } // UNLOCK ReferenceTypeID table
+
+    return JNI_TRUE;
+} // IsValidReferenceTypeID()   
+
+void ObjectManager::InitRefTypeIDMap() {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "InitRefTypeIDMap()"));
 
     memset(m_refTypeIDTable, 0, sizeof(m_refTypeIDTable));
     memset(m_refTypeIDTableSize, 0, sizeof(m_refTypeIDTableSize));
     memset(m_refTypeIDTableUsed, 0, sizeof(m_refTypeIDTableUsed));
 } // InitRefTypeIDMap()
 
-void ObjectManager::ResetRefTypeIDMap(JNIEnv* JNIEnvPtr) throw (AgentException) {
-    JDWP_TRACE_ENTRY("ResetRefTypeIDMap(" << JNIEnvPtr << ')');
+void ObjectManager::ResetRefTypeIDMap(JNIEnv* JNIEnvPtr) {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "ResetRefTypeIDMap(%p)", JNIEnvPtr));
 
     for (size_t idx = 0; idx < HASH_TABLE_SIZE; idx++) {
         if (m_refTypeIDTable[idx]) {
             for (size_t item = 0; item < m_refTypeIDTableUsed[idx]; item++)
-                JNIEnvPtr->DeleteWeakGlobalRef(m_refTypeIDTable[idx][item]);
+                JNIEnvPtr->DeleteWeakGlobalRef((jweak)m_refTypeIDTable[idx][item]);
             GetMemoryManager().Free(m_refTypeIDTable[idx] JDWP_FILE_LINE);
             m_refTypeIDTable[idx] = NULL;
             m_refTypeIDTableUsed[idx] = m_refTypeIDTableSize[idx] = 0;
@@ -661,17 +747,17 @@
  * FieldID (jlong) <-> jfieldID (_jfieldID*)
 */
    
-FieldID ObjectManager::MapToFieldID(JNIEnv* JNIEnvPtr, jfieldID jvmFieldID) throw () {
-    JDWP_TRACE_ENTRY("MapToFieldID(" << JNIEnvPtr << ',' << jvmFieldID << ')');
+FieldID ObjectManager::MapToFieldID(JNIEnv* JNIEnvPtr, jfieldID jvmFieldID) {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "MapToFieldID(%p,%p)", JNIEnvPtr, jvmFieldID));
 
     FieldID fieldID = reinterpret_cast<FieldID>(jvmFieldID);
     return fieldID;
 } // MapToFieldID() 
  
-jfieldID ObjectManager::MapFromFieldID(JNIEnv* JNIEnvPtr, FieldID fieldID) throw () {
-    JDWP_TRACE_ENTRY("MapFromFieldID(" << JNIEnvPtr << ',' << fieldID << ')');
+jfieldID ObjectManager::MapFromFieldID(JNIEnv* JNIEnvPtr, FieldID fieldID) {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "MapFromFieldID(%p,%p)", JNIEnvPtr, fieldID));
 
-    jfieldID jvmFieldID = reinterpret_cast<jfieldID>(static_cast<intptr_t>(fieldID));
+    jfieldID jvmFieldID = (jfieldID)(fieldID);
     return jvmFieldID;
 } // MapFromFieldID() 
 
@@ -682,17 +768,17 @@
  * MethodID (jlong) <-> jmethodID (_jmethodID*)
 */
    
-MethodID ObjectManager::MapToMethodID(JNIEnv* JNIEnvPtr, jmethodID jvmMethodID) throw () {
-    JDWP_TRACE_ENTRY("MapToMethodID(" << JNIEnvPtr << ',' << jvmMethodID << ')');
+MethodID ObjectManager::MapToMethodID(JNIEnv* JNIEnvPtr, jmethodID jvmMethodID) {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "MapToMethodID(%p,%p)", JNIEnvPtr, jvmMethodID));
 
     MethodID methodID = reinterpret_cast<MethodID>(jvmMethodID);
     return methodID;
 } // MapToMethodID() 
  
-jmethodID ObjectManager::MapFromMethodID(JNIEnv* JNIEnvPtr, MethodID methodID) throw () {
-    JDWP_TRACE_ENTRY("MapFromMethodID(" << JNIEnvPtr << ',' << methodID << ')');
+jmethodID ObjectManager::MapFromMethodID(JNIEnv* JNIEnvPtr, MethodID methodID) {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "MapFromMethodID(%p,%lld)", JNIEnvPtr, methodID));
 
-    jmethodID jvmMethodID = reinterpret_cast<jmethodID>(static_cast<intptr_t>(methodID));
+    jmethodID jvmMethodID = (jmethodID)(methodID);
     return jvmMethodID;
 } // MapFromMethodID() 
 
@@ -711,7 +797,7 @@
 const jlong FRAMEID_TABLE_INIT_SIZE = 128; // in ThreadFramesItem
 
 ObjectManager::ThreadFramesItem* ObjectManager::ExpandThreadFramesTable()
-        throw (AgentException) {
+        {
     if ( m_frameIDTableSize == 0 ) {
         m_frameIDTable =
             reinterpret_cast<ThreadFramesItem*>
@@ -742,7 +828,7 @@
 
 ObjectManager::ThreadFramesItem* ObjectManager::NewThreadFramesItem
         (JNIEnv* JNIEnvPtr, jthread jvmThread, jint framesCount)
-        throw (AgentException) {
+{
     ThreadFramesItem* threadFramesItem = m_frameIDTable;
     if ( m_freeItemsNumberInFrameIDTable == 0 ) {
         threadFramesItem = ExpandThreadFramesTable();
@@ -770,8 +856,8 @@
          *   suppose just this case is here
         */
         JNIEnvPtr->ExceptionClear();
-        JDWP_TRACE_MAP("## NewThreadFramesItem: OutOfMemoryException");
-        throw OutOfMemoryException();
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## NewThreadFramesItem: OutOfMemoryException"));
+        return NULL;
     }
 
     threadFramesItem->jvmThread = newWeakGlobRef;
@@ -784,9 +870,8 @@
 
 FrameID ObjectManager::MapToFrameID(JNIEnv* JNIEnvPtr, jthread jvmThread,
                                     jint frameDepth, jint framesCount)
-                                    throw (AgentException) {
-    JDWP_TRACE_ENTRY("MapToFrameID(" << JNIEnvPtr << ',' << jvmThread 
-        << ',' << frameDepth << ',' << framesCount << ')');
+                                    {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "MapToFrameID(%p,%p,%d,%d)", JNIEnvPtr, jvmThread, frameDepth, framesCount));
 
     /* according to the JDWP agent policy it is supposed that passed jvmThread
      * is JNI global reference so do not check if the jvmThread is garbage
@@ -816,8 +901,8 @@
         if ( (frameDepth < 0) 
                 || (frameDepth >= framesCount) ) {
             // passed frameDepth is INVALID ");
-            JDWP_TRACE_MAP("## MapToFrameID: JDWP_ERROR_INVALID_LENGTH#1");
-            throw AgentException(JDWP_ERROR_INVALID_LENGTH);
+            JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## MapToFrameID: JDWP_ERROR_INVALID_LENGTH#1"));
+            return 0;
         }
         threadFramesItem = NewThreadFramesItem(JNIEnvPtr, jvmThread, framesCount);
         // can be OutOfMemoryException, InternalErrorException
@@ -825,8 +910,8 @@
         if ( (frameDepth < 0) 
                 || (frameDepth >= threadFramesItem->framesCountOfThread) ) {
             // passed frameDepth is INVALID ");
-            JDWP_TRACE_MAP("## MapToFrameID: JDWP_ERROR_INVALID_LENGTH#2");
-            throw AgentException(JDWP_ERROR_INVALID_LENGTH);
+            JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## MapToFrameID: JDWP_ERROR_INVALID_LENGTH#2"));
+            return 0;
         }
     }
     frameID = threadFramesItem->currentFrameID + frameDepth;
@@ -835,8 +920,8 @@
 
 } // MapToFrameID() 
 
-jint ObjectManager::MapFromFrameID(JNIEnv* JNIEnvPtr, FrameID frameID) throw (AgentException) {
-    JDWP_TRACE_ENTRY("MapFromFrameID(" << JNIEnvPtr << ',' << frameID << ')');
+jint ObjectManager::MapFromFrameID(JNIEnv* JNIEnvPtr, FrameID frameID) {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "MapFromFrameID(%p,%lld)", JNIEnvPtr, frameID));
 
     // searching for threadFramesItem for given FrameID
     jint frameIndex;
@@ -859,20 +944,20 @@
     }
     if ( tableIndex == m_frameIDTableSize ) {
         // threadFramesItem for given FrameID is not found out in table*/
-        JDWP_TRACE_MAP("## MapFromFrameID: JDWP_ERROR_INVALID_FRAMEID");
-        throw AgentException(JDWP_ERROR_INVALID_FRAMEID);
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## MapFromFrameID: JDWP_ERROR_INVALID_FRAMEID"));
+        return 0;
     }
     frameIndex = static_cast<jint>(frameID - threadFramesItem->currentFrameID);
     } // synchronized block: frameIDTableLock
     return frameIndex;
 } // MapFromFrameID() 
 
-void ObjectManager::DeleteFrameIDs(JNIEnv* JNIEnvPtr, jthread jvmThread) throw () {
-    JDWP_TRACE_ENTRY("DeleteFrameIDs(" << JNIEnvPtr << ',' << jvmThread << ')');
+void ObjectManager::DeleteFrameIDs(JNIEnv* JNIEnvPtr, jthread jvmThread) {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "DeleteFrameIDs(%p,%p)", JNIEnvPtr, jvmThread));
 
     if ( JNIEnvPtr->IsSameObject(jvmThread, NULL) == JNI_TRUE ) {
         // jvmThread object is GARBAGE COLLECTED: possible case - do nothing
-        JDWP_TRACE_MAP("## DeleteFrameIDs: ignore NULL jthread");
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "## DeleteFrameIDs: ignore NULL jthread"));
         return;
     }
 
@@ -905,8 +990,8 @@
     } // synchronized block: frameIDTableLock
 } // DeleteFrameIDs() 
 
-void ObjectManager::InitFrameIDMap() throw () {
-    JDWP_TRACE_ENTRY("InitFrameIDMap()");
+void ObjectManager::InitFrameIDMap() {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "InitFrameIDMap()"));
 
     m_frameIDTableSize = 0; 
     m_freeItemsNumberInFrameIDTable = 0; 
@@ -914,8 +999,8 @@
     m_maxAllocatedFrameID = 0;
 } // InitFrameIDMap()
 
-void ObjectManager::ResetFrameIDMap(JNIEnv* JNIEnvPtr) throw (AgentException) {
-    JDWP_TRACE_ENTRY("ResetFrameIDMap(" << JNIEnvPtr << ')');
+void ObjectManager::ResetFrameIDMap(JNIEnv* JNIEnvPtr) {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "ResetFrameIDMap(%p)", JNIEnvPtr));
 
     if ( m_frameIDTable != 0 ) {
         // delete all weak global references from frameIDTable
@@ -927,7 +1012,7 @@
                 threadFramesItem++;
                 continue;
             }
-            JNIEnvPtr->DeleteWeakGlobalRef(threadFramesItem->jvmThread);
+            JNIEnvPtr->DeleteWeakGlobalRef((jweak)threadFramesItem->jvmThread);
             threadFramesItem++;
         }
         AgentBase::GetMemoryManager().Free(m_frameIDTable JDWP_FILE_LINE);
@@ -938,8 +1023,8 @@
 
 // =============================================================================
 
-void ObjectManager::Init(JNIEnv* JNIEnvPtr) throw (AgentException) {
-    JDWP_TRACE_ENTRY("Init(" << JNIEnvPtr << ')');
+void ObjectManager::Init(JNIEnv* JNIEnvPtr) {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "Init(%p)", JNIEnvPtr));
 
     InitObjectIDMap();
     InitRefTypeIDMap();
@@ -950,36 +1035,36 @@
     // can be AgentException(jvmtiError err);
 } // Init()
 
-void ObjectManager::Reset(JNIEnv* JNIEnvPtr) throw (AgentException) {
-    JDWP_TRACE_ENTRY("Reset(" << JNIEnvPtr << ')');
+void ObjectManager::Reset(JNIEnv* JNIEnvPtr) {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "Reset(%p)", JNIEnvPtr));
 
     if (m_objectIDTableMonitor != 0){
-        JDWP_TRACE_MAP("=> m_objectIDTableMonitor ");
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "=> m_objectIDTableMonitor "));
         m_objectIDTableMonitor->Enter(); 
-        JDWP_TRACE_MAP("<= m_objectIDTableMonitor");
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "<= m_objectIDTableMonitor"));
         m_objectIDTableMonitor->Exit(); 
         ResetObjectIDMap(JNIEnvPtr); //    can    be InternalErrorException
     }
 
     if (m_refTypeIDTableMonitor != 0) {
-        JDWP_TRACE_MAP("=> m_refTypeIDTableMonitor");
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "=> m_refTypeIDTableMonitor"));
         m_refTypeIDTableMonitor->Enter(); 
-        JDWP_TRACE_MAP("<= m_refTypeIDTableMonitor");
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "<= m_refTypeIDTableMonitor"));
         m_refTypeIDTableMonitor->Exit(); 
         ResetRefTypeIDMap(JNIEnvPtr); // can be InternalErrorException
     }
 
     if (m_frameIDTableMonitor != 0) {
-        JDWP_TRACE_MAP("=> m_frameIDTableMonitor");
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "=> m_frameIDTableMonitor"));
         m_frameIDTableMonitor->Enter(); 
-        JDWP_TRACE_MAP("<= m_frameIDTableMonitor");
+        JDWP_TRACE(LOG_RELEASE, (LOG_MAP_FL, "<= m_frameIDTableMonitor"));
         m_frameIDTableMonitor->Exit(); 
         ResetFrameIDMap(JNIEnvPtr); // can be InternalErrorException
     }
 } // Reset()
 
-void ObjectManager::Clean(JNIEnv* JNIEnvPtr) throw () {
-    JDWP_TRACE_ENTRY("Clean(" << JNIEnvPtr << ')');
+void ObjectManager::Clean(JNIEnv* JNIEnvPtr) {
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "Clean(%p)", JNIEnvPtr));
 
     if (m_objectIDTableMonitor != 0)
         delete m_objectIDTableMonitor;
@@ -989,7 +1074,7 @@
         delete m_frameIDTableMonitor;
 } // Clean()
 
-ObjectManager::ObjectManager () throw ()
+ObjectManager::ObjectManager ()
 {
     m_objectIDTableMonitor = 0;
     m_refTypeIDTableMonitor = 0;
@@ -1001,7 +1086,7 @@
 #endif // NDEBUG
 }
 
-ObjectManager::~ObjectManager () throw () {
+ObjectManager::~ObjectManager () {
 }
 
 // =============================================================================

Modified: harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/ObjectManager.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/ObjectManager.h?rev=794726&r1=794725&r2=794726&view=diff
==============================================================================
--- harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/ObjectManager.h (original)
+++ harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/ObjectManager.h Thu Jul 16 15:57:37 2009
@@ -15,12 +15,6 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-
-/**
- * @author Anatoly F. Bondarenko
- * @version $Revision: 1.9.2.1 $
- */
-
 /**
  * @file
  * ObjectManager.h
@@ -38,8 +32,15 @@
 #include "jdwpTypes.h"
 #include "AgentMonitor.h"
 
+#if defined(ZOS)
+#include <inttypes.h>
+#endif
+
 namespace jdwp {
 
+    // Constant defining initial value for ReferenceTypeID to be different from  ObjectID values
+    const ReferenceTypeID REFTYPEID_MINIMUM = 1000000000;
+
     // hash table parameters
     enum {
         // hash table buffer incrementation value
@@ -81,6 +82,20 @@
         // Public primitives of Mapping 
     // =========================================================================
     public:
+        /** 
+         * Find the JVM object of the type <code>jobject</code> in map 
+         * according to JDWP identifier of the type <code>ObjectID</code> 
+         *
+         * @param JNIEnvPtr - the JNI interface pointer used to call
+         *                    necessary JNI functions
+         * @param objectID  - the JDWP identifier of the <code>ObjectID</code>
+         *                    type to be mapped.
+         *
+         * @return Returns true when get a same object identifer as the second 
+         *                    parameter according to specified <code>jobject</code>,
+         *                    otherwise return false.
+         */
+        jboolean FindObjectID(JNIEnv* JNIEnvPtr, jobject jvmObject, ObjectID objectID);
 
         // Mapping: <code>ObjectID</code> <-> <code>jobject</code>
         // Includes the following JDWP types: <code>objectID</code>, <code>threadID</code>, 
@@ -123,8 +138,7 @@
          *            <code>AgentException(JDWP_ERROR_INTERNAL)</code> - if an 
          *            unexpected internal JDWP agent error has occurred.
          */
-        ObjectID MapToObjectID(JNIEnv* JNIEnvPtr, jobject jvmObject)
-            throw (AgentException);
+        ObjectID MapToObjectID(JNIEnv* JNIEnvPtr, jobject jvmObject);
 
         /** 
          * Maps the JDWP identifier of the type <code>ObjectID</code> to the 
@@ -143,8 +157,7 @@
          *            or was disposed; or corresponding <code>jvmObject</code>
          *            has been unloaded and garbage-collected.
          */
-        jobject MapFromObjectID(JNIEnv* JNIEnvPtr, ObjectID objectID)
-            throw (AgentException);
+        jobject MapFromObjectID(JNIEnv* JNIEnvPtr, ObjectID objectID);
 
         /** 
          * Changes a condition of corresponding <code>jvmObject</code> so, 
@@ -165,8 +178,7 @@
          *            if out-of-memory error has occurred during execution 
          *            of the given function.
          */
-        void DisableCollection(JNIEnv* JNIEnvPtr, ObjectID objectID)
-            throw (AgentException);
+        int DisableCollection(JNIEnv* JNIEnvPtr, ObjectID objectID);
 
         /** 
          * Changes a condition of corresponding <code>jvmObject</code> so, that
@@ -183,8 +195,7 @@
          *            out-of-memory error has occurred during execution of the 
          *            given function.
          */
-        void EnableCollection(JNIEnv* JNIEnvPtr, ObjectID objectID)
-            throw (AgentException);
+        int EnableCollection(JNIEnv* JNIEnvPtr, ObjectID objectID);
 
         /** 
          * Checks if garbage collection is disabled for corresponding 
@@ -201,7 +212,7 @@
          *            if the given <code>ObjectID</code> was never allocated
          *            or was disposed.
          */
-        jboolean IsCollectionDisabled(ObjectID objectID) throw (AgentException);
+        //jboolean IsCollectionDisabled(ObjectID objectID);
   
         /** 
          * Checks if corresponding <code>jvmObject</code> has been 
@@ -220,8 +231,7 @@
          *            if the given <code>ObjectID</code> was never allocated 
          *            or was disposed.
          */
-        jboolean IsCollected(JNIEnv* JNIEnvPtr, ObjectID objectID)
-            throw (AgentException);
+        jboolean IsCollected(JNIEnv* JNIEnvPtr, ObjectID objectID);
 
         /** 
          * Disposes corresponding <code>jvmObject</code> defining by given 
@@ -248,8 +258,7 @@
          *                     enables to avoid a situation when the used  
          *                     <code>ObjectID</code> can be disposed.
          */
-        void DisposeObject(JNIEnv* JNIEnvPtr, ObjectID objectID, jint refCount)
-             throw ();
+        void DisposeObject(JNIEnv* JNIEnvPtr, ObjectID objectID, jint refCount);
 
         /** 
          * Increases the count of references to given <code>ObjectID</code> 
@@ -265,8 +274,7 @@
          * @return Returns the new value of the references count after
          *         increasing.
          */
-        jint IncreaseIDRefCount(ObjectID objectID, jint incrementValue = 1)
-            throw ();
+        jint IncreaseIDRefCount(ObjectID objectID, jint incrementValue = 1);
 
     // =========================================================================
         // Mapping: <code>ReferenceTypeID</code> <-> <code>jclass</code> (=> <code>jobject</code>)
@@ -308,8 +316,7 @@
          *            <code>AgentException(JDWP_ERROR_INTERNAL)</code> - if an 
          *            unexpected internal JDWP agent error has occurred.
          */
-        ReferenceTypeID MapToReferenceTypeID(JNIEnv* JNIEnvPtr, jclass jvmClass)
-            throw (AgentException);
+        ReferenceTypeID MapToReferenceTypeID(JNIEnv* JNIEnvPtr, jclass jvmClass);
 
         /** 
          * Maps the JDWP identifier of the type <code>ReferenceTypeID</code> to 
@@ -330,8 +337,23 @@
          *            type or a corresponding JVM <code>jclass</code> has been unloaded and 
          *            garbage-collected.
          */
-        jclass MapFromReferenceTypeID(JNIEnv* JNIEnvPtr, ReferenceTypeID refTypeID)
-            throw (AgentException);
+        jclass MapFromReferenceTypeID(JNIEnv* JNIEnvPtr, ReferenceTypeID refTypeID);
+        
+        /** 
+         * Checks if the passed <code>objID</code> of JDWP identifier is a valid
+         * <code>ReferenceTypeID</code>, that is currently it represents in the JDI 
+         * level the JVM reference type.
+         * 
+         * @param JNIEnvPtr - the JNI interface pointer used to call
+         *                    necessary JNI functions
+         * @param objID  - the JDWP identifier of the type 
+         *                    <code>ObjectID</code> to be checked
+         *
+         * @return Returns the <code>JNI_TRUE</code> value if the passed 
+         *         <code>objID</code> is a valid <code>ReferenceTypeID</code>, 
+         *         <code>JNI_FALSE</code> otherwise.
+         */
+        jboolean IsValidReferenceTypeID(JNIEnv* JNIEnvPtr,ObjectID objID);
 
     // =========================================================================
         // Mapping: <code>FieldID</code> <-> <code>jfieldID</code>
@@ -350,7 +372,7 @@
          * @return Returns the JDWP identifier of the type <code>FieldID</code>
          *         to which <code>jvmFieldID</code> is mapped.
          */
-        FieldID MapToFieldID(JNIEnv* JNIEnvPtr, jfieldID jvmFieldID) throw ();
+        FieldID MapToFieldID(JNIEnv* JNIEnvPtr, jfieldID jvmFieldID);
 
         /** 
          * Maps the JDWP identifier of the type <code>FieldID</code> to the 
@@ -364,7 +386,7 @@
          * @return Returns the JVM identifier of the type <code>jfieldID</code>
          *         to which <code>fieldID</code> is mapped.
          */
-        jfieldID MapFromFieldID(JNIEnv* JNIEnvPtr, FieldID fieldID) throw ();
+        jfieldID MapFromFieldID(JNIEnv* JNIEnvPtr, FieldID fieldID);
 
     // =========================================================================
         // Mapping: <code>MethodID</code> <-> <code>jmethodID</code>
@@ -383,8 +405,7 @@
          * @return Returns the JDWP identifier of the type <code>MethodID</code> to which
          *         <code>jvmMethodID</code> is mapped.
          */
-        MethodID MapToMethodID(JNIEnv* JNIEnvPtr, jmethodID jvmMethodID)
-            throw ();
+        MethodID MapToMethodID(JNIEnv* JNIEnvPtr, jmethodID jvmMethodID);
 
         /** 
          * Maps the JDWP identifier of the type <code>MethodID</code> to the 
@@ -398,8 +419,7 @@
          * @return Returns the JVM identifier of the type <code>jmethodID</code> to 
          *         which methodID is mapped to.
          */
-        jmethodID MapFromMethodID(JNIEnv* JNIEnvPtr, MethodID methodID)
-            throw ();
+        jmethodID MapFromMethodID(JNIEnv* JNIEnvPtr, MethodID methodID);
 
     // =========================================================================
         // Mapping: <code>FrameID</code> <-> <code>jthread</code> + <code>depth (jint)</code>
@@ -439,8 +459,7 @@
          *            current stack frames.
          */
         FrameID MapToFrameID(JNIEnv* JNIEnvPtr, jthread jvmThread,
-                             jint frameDepth, jint framesCount)
-            throw (AgentException);
+                             jint frameDepth, jint framesCount);
 
         /** 
          * Maps the JDWP identifier of the type <code>FrameID</code> to the 
@@ -459,8 +478,7 @@
          *            identifier, that is it does not identify any stack frame 
          *            at the current moment.
          */
-        jint MapFromFrameID(JNIEnv* JNIEnvPtr, FrameID frameID)
-            throw (AgentException);
+        jint MapFromFrameID(JNIEnv* JNIEnvPtr, FrameID frameID);
 
         /** 
          * Deletes all JDWP frames' identifiers registered at present for the 
@@ -475,8 +493,7 @@
          *                     defining the JVM thread, which <code>FrameIDs</code> 
          *                     have to be deleted for
          */
-        void DeleteFrameIDs(JNIEnv* JNIEnvPtr, jthread jvmThread)
-            throw ();
+        void DeleteFrameIDs(JNIEnv* JNIEnvPtr, jthread jvmThread);
 
     // =========================================================================
         /** 
@@ -493,7 +510,7 @@
          * @exception AgentException(jvmtiError) that 
          *            may be thrown by the <code>AgentMonitor</code> constructor.
          */
-        void Init(JNIEnv* JNIEnvPtr) throw (AgentException);
+        void Init(JNIEnv* JNIEnvPtr);
 
         /** 
          * Releases resources of the ObjectManager class instance 
@@ -509,7 +526,7 @@
          *            is the same as <code>AgentException(JDWP_ERROR_INTERNAL)</code> - if an 
          *            unexpected internal JDWP agent error has occurred.
          */
-        void Reset(JNIEnv* JNIEnvPtr) throw (AgentException);
+        void Reset(JNIEnv* JNIEnvPtr);
  
         /** 
          * Releases resources of the ObjectManager class instance  
@@ -519,17 +536,17 @@
          * @param JNIEnvPtr  - the JNI interface pointer used to call
          *                     necessary JNI functions
          */
-        void Clean(JNIEnv* JNIEnvPtr) throw ();
+        void Clean(JNIEnv* JNIEnvPtr);
 
         /** 
          * Constructor for the ObjectManager class instance.
          */
-        ObjectManager() throw ();
+        ObjectManager();
 
         /** 
          * Destructor for the ObjectManager class instance.
          */
-        ~ObjectManager () throw ();
+        ~ObjectManager ();
 
 
     // =========================================================================
@@ -635,7 +652,7 @@
          *            <code>AgentException(JDWP_ERROR_INTERNAL)</code> - if an 
          *            unexpected internal JDWP agent error has occurred.
          */
-        void ExpandObjectIDTable() throw (AgentException);
+        void ExpandObjectIDTable();
 
         /** 
          * Maps the JVM object of the type <code>jobject</code> to the JDWP 
@@ -658,14 +675,15 @@
          *            <code>AgentException(JDWP_ERROR_INTERNAL)</code> - if an 
          *            unexpected internal JDWP agent error has occurred.
          */
-        ObjectID MapToNewObjectID(JNIEnv* JNIEnvPtr, jobject jvmObject)
-            throw (AgentException);
+        ObjectID MapToNewObjectID(JNIEnv* JNIEnvPtr, jobject jvmObject);
 
         /** 
          * Checks if the passed <code>ObjectID</code> JDWP identifier is valid
          * <code>ObjectID</code>, that is currently it represents in the JDI 
          * level the JVM object of the <code>jobject</code> type.
          * 
+         * @param JNIEnvPtr - the JNI interface pointer used to call
+         *                    necessary JNI functions
          * @param objectID  - the JDWP identifier of the type 
          *                    <code>ObjectID</code> to be checked
          *
@@ -673,14 +691,14 @@
          *         <code>objectID</code> is valid, <code>JNI_FALSE</code> 
          *         otherwise.
          */
-        jboolean IsValidObjectID(ObjectID objectID) throw ();
+        jboolean IsValidObjectID(JNIEnv* JNIEnvPtr, ObjectID objectID);
 
         /** 
          * Initializes the fields of the ObjectManager class used 
          * for <code>ObjectID</code> values mapping. It is called by the 
          * Init() function.
          */
-        void InitObjectIDMap() throw ();
+        void InitObjectIDMap();
 
         /** 
          * Disposes all allocated <code>ObjectID</code> values and releases memory 
@@ -696,7 +714,7 @@
          *            <code>AgentException(JDWP_ERROR_INTERNAL)</code> - if an 
          *            unexpected internal JDWP agent error has occurred.
          */
-        void ResetObjectIDMap(JNIEnv* JNIEnvPtr) throw (AgentException);
+        void ResetObjectIDMap(JNIEnv* JNIEnvPtr);
 
     // =========================================================================
         // Mapping: <code>ReferenceTypeID</code> <-> <code>jclass</code>
@@ -728,7 +746,7 @@
          * for <code>ReferenceTypeIDs</code> mapping. It is called by the 
          * Init() function.
          */
-        void InitRefTypeIDMap() throw ();
+        void InitRefTypeIDMap();
 
         /** 
          * Deletes all weak Global References for allocated 
@@ -744,7 +762,7 @@
          *            <code>AgentException(JDWP_ERROR_INTERNAL)</code> - if an 
          *            unexpected internal JDWP agent error has occurred.
          */
-        void ResetRefTypeIDMap(JNIEnv* JNIEnvPtr) throw (AgentException);
+        void ResetRefTypeIDMap(JNIEnv* JNIEnvPtr);
 
     // =========================================================================
         // Mapping: <code>FrameID</code> <-> <code>jthread</code> + <code>depth (jint)</code>
@@ -826,7 +844,7 @@
          *            <code>AgentException(JDWP_ERROR_INTERNAL)</code> - if an 
          *            unexpected internal JDWP agent error has occurred.
          */
-        ThreadFramesItem* ExpandThreadFramesTable() throw (AgentException);
+        ThreadFramesItem* ExpandThreadFramesTable();
 
         /** 
          * Allocates the new ThreadFramesItem to map the stack 
@@ -854,14 +872,13 @@
          *            unexpected internal JDWP agent error has occurred.
          */
         ThreadFramesItem* NewThreadFramesItem(JNIEnv* JNIEnvPtr, 
-            jthread jvmThread, jint framesCount)
-            throw (AgentException);
+            jthread jvmThread, jint framesCount);
 
         /** 
          * Initializes the fields of the ObjectManager class used for 
          * <code>FrameIDs</code> mapping. It is called by the Init() function.
          */
-        void InitFrameIDMap() throw ();
+        void InitFrameIDMap();
 
         /** 
          * Releases memory from under the table of <code>FrameIDs</code>. 
@@ -876,7 +893,7 @@
          *            <code>AgentException(JDWP_ERROR_INTERNAL)</code> - if an 
          *            unexpected internal JDWP agent error has occurred.
          */
-        void ResetFrameIDMap(JNIEnv* JNIEnvPtr) throw (AgentException);
+        void ResetFrameIDMap(JNIEnv* JNIEnvPtr);
     // =========================================================================
 
     // =========================================================================

Modified: harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/OptionParser.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/OptionParser.cpp?rev=794726&r1=794725&r2=794726&view=diff
==============================================================================
--- harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/OptionParser.cpp (original)
+++ harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/OptionParser.cpp Thu Jul 16 15:57:37 2009
@@ -15,31 +15,24 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-
-/**
- * @author Pavel N. Vyssotski
- * @version $Revision: 1.7 $
- */
-// OptionParser.cpp
-
-#include <cstring>
-
 #include "AgentBase.h"
 #include "MemoryManager.h"
-#include "AgentException.h"
+#include "ExceptionManager.h"
 #include "Log.h"
 
 #include "OptionParser.h"
 
+#include <string.h>
+
 using namespace jdwp;
-using namespace std;
 
-OptionParser::OptionParser() throw()
+OptionParser::OptionParser()
 {
     m_optionCount = 0;
     m_optionString = 0;
     m_options = 0;
     m_help = false;
+    m_version = false;
     m_suspend = true;
     m_server = false;
     m_timeout = 0;
@@ -53,28 +46,38 @@
     m_launch = 0;
 }
 
-bool OptionParser::AsciiToBool(const char *str) throw(IllegalArgumentException)
+bool OptionParser::IsValidBool(const char *str)
 {
-    if (strcmp("y", str) == 0) {
+    if (strcmp("y", str) == 0
+         || strcmp("n", str) == 0) {
         return true;
-    } else if (strcmp("n", str) == 0) {
+    } else {
+        AgentException ex(JDWP_ERROR_ILLEGAL_ARGUMENT);
+        JDWP_SET_EXCEPTION(ex);
         return false;
+    }
+}
+
+bool OptionParser::AsciiToBool(const char *str)
+{
+    if (*str == 'y') {
+        return true;
     } else {
-        throw IllegalArgumentException();
+        return false;
     }
 }
 
-void OptionParser::Parse(const char* str) throw(AgentException)
+int OptionParser::Parse(const char* str)
 {
     size_t i;
     int k;
 
     if (str == 0)
-        return;
+        return JDWP_ERROR_NONE;
 
     const size_t len = strlen(str);
     if (len == 0)
-        return;
+        return JDWP_ERROR_NONE;
 
     for (i = 0; i < len; i++) {
         if (str[i] == ',') {
@@ -82,14 +85,18 @@
         } else if (str[i] == '"' || str[i] == '\'') {
             char quote = str[i];
             if (i > 0 && str[i-1] != '=') {
-                throw IllegalArgumentException();
+                AgentException ex(JDWP_ERROR_ILLEGAL_ARGUMENT);
+                JDWP_SET_EXCEPTION(ex);
+                return JDWP_ERROR_ILLEGAL_ARGUMENT;
             }
             i++;
             while (i < len && str[i] != quote) {
                 i++;
             }
             if (i+1 < len && str[i+1] != ',') {
-                throw IllegalArgumentException();
+                AgentException ex(JDWP_ERROR_ILLEGAL_ARGUMENT);
+                JDWP_SET_EXCEPTION(ex);
+                return JDWP_ERROR_ILLEGAL_ARGUMENT;
             }
         }
     }
@@ -139,36 +146,43 @@
         } else if (strcmp("timeout", m_options[k].name) == 0) {
             m_timeout = atol(m_options[k].value);
         } else if (strcmp("suspend", m_options[k].name) == 0) {
+            if (!IsValidBool(m_options[k].value)) return JDWP_ERROR_ILLEGAL_ARGUMENT;
             m_suspend = AsciiToBool(m_options[k].value);
         } else if (strcmp("server", m_options[k].name) == 0) {
+            if (!IsValidBool(m_options[k].value)) return JDWP_ERROR_ILLEGAL_ARGUMENT;
             m_server = AsciiToBool(m_options[k].value);
         } else if (strcmp("launch", m_options[k].name) == 0) {
             m_launch = m_options[k].value;
         } else if (strcmp("onuncaught", m_options[k].name) == 0) {
+            if (!IsValidBool(m_options[k].value)) return JDWP_ERROR_ILLEGAL_ARGUMENT;
             m_onuncaught = AsciiToBool(m_options[k].value);
         } else if (strcmp("onthrow", m_options[k].name) == 0) {
             m_onthrow = m_options[k].value;
         } else if (strcmp("help", m_options[k].name) == 0) {
             m_help = true;
-#ifndef NDEBUG
+        } else if (strcmp("version", m_options[k].name) == 0) {
+            m_version = true;
         } else if (strcmp("log", m_options[k].name) == 0) {
             m_log = m_options[k].value;
         } else if (strcmp("trace", m_options[k].name) == 0) {
             m_kindFilter = m_options[k].value;
         } else if (strcmp("src", m_options[k].name) == 0) {
             m_srcFilter = m_options[k].value;
-#endif // NDEBUG
         }
     }
     if ((m_onthrow != 0) || (m_onuncaught != 0)) {
         if (m_launch == 0) {
-            JDWP_ERROR("Specify launch=<command line> when using onthrow or onuncaught option");
-            throw IllegalArgumentException();
+            JDWP_TRACE(LOG_RELEASE, (LOG_ERROR_FL, "Specify launch=<command line> when using onthrow or onuncaught option"));
+            AgentException ex(JDWP_ERROR_ILLEGAL_ARGUMENT);
+            JDWP_SET_EXCEPTION(ex);
+            return JDWP_ERROR_ILLEGAL_ARGUMENT;
         }
     }
+
+    return JDWP_ERROR_NONE;
 }
 
-OptionParser::~OptionParser() throw()
+OptionParser::~OptionParser()
 {
     if (m_optionString != 0)
         AgentBase::GetMemoryManager().Free(m_optionString JDWP_FILE_LINE);
@@ -176,7 +190,7 @@
         AgentBase::GetMemoryManager().Free(m_options JDWP_FILE_LINE);
 }
 
-const char *OptionParser::FindOptionValue(const char *name) const throw()
+const char *OptionParser::FindOptionValue(const char *name) const
 {
     for (int i = 0; i < m_optionCount; i++) {
         if (strcmp(name, m_options[i].name) == 0) {

Modified: harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/OptionParser.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/OptionParser.h?rev=794726&r1=794725&r2=794726&view=diff
==============================================================================
--- harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/OptionParser.h (original)
+++ harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/OptionParser.h Thu Jul 16 15:57:37 2009
@@ -15,12 +15,6 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-
-/**
- * @author Pavel N. Vyssotski
- * @version $Revision: 1.8.2.1 $
- */
-
 /**
  * @file
  * OptionParser.h
@@ -33,6 +27,7 @@
 #define _OPTION_PARSER_H_
 
 #include "AgentBase.h"
+#include "ExceptionManager.h"
 
 namespace jdwp {
 
@@ -47,24 +42,24 @@
         /**
          * A constructor.
          */
-        OptionParser() throw();
+        OptionParser();
 
         /**
          * A destructor.
          */
-        ~OptionParser() throw();
+        ~OptionParser();
 
         /**
          * Parses the input string containing the arguments passed to the agent.
          *
          * @param str - the string containing agent arguments
          */
-        void Parse(const char* str) throw(AgentException);
+        int Parse(const char* str);
 
         /**
          * Returns a number of parsed options.
          */
-        int GetOptionCount() const throw() {
+        int GetOptionCount() const {
             return m_optionCount;
         }
 
@@ -75,38 +70,52 @@
          * @param name  - the option name
          * @param value - the option value
          */
-        void GetOptionByIndex(int i, const char *&name, const char *&value)
-                const throw(InvalidIndexException) {
+#ifndef NDEBUG
+        int GetOptionByIndex(int i, const char *&name, const char *&value)
+                const {
             if (i < m_optionCount) {
                 name = m_options[i].name;
                 value = m_options[i].value;
+                return JDWP_ERROR_NONE;
             } else {
-                throw InvalidIndexException();
+                AgentException ex(JDWP_ERROR_INVALID_INDEX);
+                JDWP_SET_EXCEPTION(ex);
+                return JDWP_ERROR_INVALID_INDEX;
             }
         }
+#endif /* NDEBUG */
 
         /**
          * Looks for an option with the given name.
          *
          * @param name - the option name
          */
-        const char *FindOptionValue(const char *name) const throw();
+        const char *FindOptionValue(const char *name) const;
 
         /**
          * Returns a value for the agent's <code>help</code> option.
          *
          * @return Boolean.
          */
-        bool GetHelp() const throw() {
+        bool GetHelp() const {
             return m_help;
         }
 
         /**
+         * Returns a value for the agent's <code>version</code> option.
+         *
+         * @return Boolean.
+         */
+        bool GetVersion() const {
+            return m_version;
+        }
+
+        /**
          * Returns a value for the agent's <code>suspend</code> option.
          *
          * @return Boolean.
          */
-        bool GetSuspend() const throw() {
+        bool GetSuspend() const {
             return m_suspend;
         }
 
@@ -115,7 +124,7 @@
          *
          * @return Boolean.
          */
-        bool GetServer() const throw() {
+        bool GetServer() const {
             return m_server;
         }
 
@@ -124,7 +133,7 @@
          *
          * @return Boolean.
          */
-        bool GetOnuncaught() const throw() {
+        bool GetOnuncaught() const {
             return m_onuncaught;
         }
 
@@ -133,7 +142,7 @@
          *
          * @return Java long value.
          */
-        jlong GetTimeout() const throw() {
+        jlong GetTimeout() const {
             return m_timeout;
         }
 
@@ -142,7 +151,7 @@
          *
          * @return Zero-terminated string.
          */
-        const char *GetTransport() const throw() {
+        const char *GetTransport() const {
             return m_transport;
         }
 
@@ -151,7 +160,7 @@
          *
          * @return Zero-terminated string.
          */
-        const char *GetAddress() const throw() {
+        const char *GetAddress() const {
             return m_address;
         }
 
@@ -160,7 +169,7 @@
          *
          * @return Zero-terminated string.
          */
-        const char *GetLog() const throw() {
+        const char *GetLog() const {
             return m_log;
         }
 
@@ -169,7 +178,7 @@
          *
          * @return Zero-terminated string.
          */
-        const char *GetTraceKindFilter() const throw() {
+        const char *GetTraceKindFilter() const {
             return m_kindFilter;
         }
 
@@ -178,7 +187,7 @@
          *
          * @return Zero-terminated string.
          */
-        const char *GetTraceSrcFilter() const throw() {
+        const char *GetTraceSrcFilter() const {
             return m_srcFilter;
         }
 
@@ -187,7 +196,7 @@
          *
          * @return Zero-terminated string.
          */
-        const char *GetOnthrow() const throw() {
+        const char *GetOnthrow() const {
             return m_onthrow;
         }
 
@@ -196,7 +205,7 @@
          *
          * @return Zero-terminated string.
          */
-        const char *GetLaunch() const throw() {
+        const char *GetLaunch() const {
             return m_launch;
         }
 
@@ -211,19 +220,27 @@
         };
 
         /**
-         * The helper converting string to boolean.
+         * Checks if the input string is "y" or "n"
          *
          * @param str - the input null-terminated string
          *
          * @exception IllegalArgumentException.
          */
-        bool AsciiToBool(const char *str) throw(IllegalArgumentException);
+        bool IsValidBool(const char *str);
+
+        /**
+         * The helper converting string to boolean.
+         *
+         * @param str - the input null-terminated string
+         */
+        bool AsciiToBool(const char *str);
 
         int m_optionCount;
         char *m_optionString;
         Option *m_options;
 
         bool m_help;
+        bool m_version;
         bool m_suspend;
         bool m_server;
         bool m_onuncaught;

Modified: harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/PacketDispatcher.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/PacketDispatcher.cpp?rev=794726&r1=794725&r2=794726&view=diff
==============================================================================
--- harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/PacketDispatcher.cpp (original)
+++ harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/PacketDispatcher.cpp Thu Jul 16 15:57:37 2009
@@ -15,11 +15,6 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-
-/**
- * @author Vitaly A. Provodin
- * @version $Revision: 1.22 $
- */
 #include "PacketDispatcher.h"
 #include "TransportManager.h"
 #include "AgentException.h"
@@ -29,12 +24,13 @@
 #include "ClassManager.h"
 #include "RequestManager.h"
 #include "OptionParser.h"
+#include "ExceptionManager.h"
 
 using namespace jdwp;
 
 //-----------------------------------------------------------------------------
 
-PacketDispatcher::PacketDispatcher() throw()
+PacketDispatcher::PacketDispatcher()
     :AgentBase()
 {
     m_isProcessed = false;
@@ -46,34 +42,28 @@
 //-----------------------------------------------------------------------------
 
 void
-PacketDispatcher::Init(JNIEnv *jni) throw(AgentException)
+PacketDispatcher::Init(JNIEnv *jni)
 {
-    JDWP_TRACE_ENTRY("Init(" << jni << ")");
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "Init(%p)", jni));
 
     m_completionMonitor = new AgentMonitor("_agent_Packet_Dispatcher_completion");
     m_executionMonitor = new AgentMonitor("_agent_Packet_Dispatcher_execution");
 }
 
-void
-PacketDispatcher::Start(JNIEnv *jni) throw(AgentException)
+int
+PacketDispatcher::Start(JNIEnv *jni)
 {
-    JDWP_TRACE_ENTRY("Start(" << jni << ")");
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "Start(%p)", jni));
 
     JDWP_ASSERT(!m_isProcessed);
 
-    try
-    {
-        m_threadObject = jni->NewGlobalRef(GetThreadManager().RunAgentThread(jni, StartFunction, this,
-            JVMTI_THREAD_MAX_PRIORITY, "_jdwp_PacketDispatcher"));
-    }
-    catch (const AgentException& e)
-    {
-        JDWP_ASSERT(e.ErrCode() != JDWP_ERROR_NULL_POINTER);
-        JDWP_ASSERT(e.ErrCode() != JDWP_ERROR_INVALID_PRIORITY);
-
-        throw e;
+    jthread thread = GetThreadManager().RunAgentThread(jni, StartFunction, this,
+                                         JVMTI_THREAD_MAX_PRIORITY, "_jdwp_PacketDispatcher");
+    if (thread == 0) {
+        return JDWP_ERROR_INTERNAL;
     }
-
+    m_threadObject = jni->NewGlobalRef(thread);
+    return JDWP_ERROR_NONE;
 }
 
 //-----------------------------------------------------------------------------
@@ -81,161 +71,142 @@
 void
 PacketDispatcher::Run(JNIEnv *jni)
 {
-    JDWP_TRACE_ENTRY("Run(" << jni << ")");
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "Run(%p)", jni));
 
-    try {
-        MonitorAutoLock lock(m_completionMonitor JDWP_FILE_LINE);
-        TransportManager &transport = GetTransportManager();
-        
-        try
-        {
-            // run multiplle sessions in a loop
-            for (; ;)
-            {
-                // connect for new session
-                JDWP_TRACE_PROG("Run: start new session");
-                try
-                {
-                    transport.Connect();
-                }
-                catch (const TransportException& e)
-                {
-                    JDWP_TRACE_PROG("Run: Exception in connection: "
-                                    << e.what() << " [" << e.ErrCode() 
-                                    << "/" << e.TransportErrorCode() << "]");
-                    if (!IsDead()) {
-                        JDWP_DIE(e.what() << " [" << e.ErrCode() << "/"
-                                    << e.TransportErrorCode() << "]: " 
-                                    << GetTransportManager().GetLastTransportError());
-                    }
-                    break;
-                }
-        
-                // start session and execute commands
-                try
-                {
-                    // inform that new session started
-                    GetEventDispatcher().NewSession();
-        
-                    // add internal request for automatic VMDeath event with no modifiers
-                    GetRequestManager().AddInternalRequest(jni,
-                        new AgentEventRequest(JDWP_EVENT_VM_DEATH, JDWP_SUSPEND_NONE));
-        
-                    // release events
-                    GetEventDispatcher().ReleaseEvents();
-        
-                    // read and execute commands
-                    m_isProcessed = true;
-                    while (m_isProcessed)
-                    {
-                        // read command
-                        try {
-                            JDWP_TRACE_PROG("Run: handle next command");
-                            m_cmdParser.ReadCommand();
-                            if (m_cmdParser.command.GetLength() == 0)
-                            break;
-                        }
-                        catch (const TransportException& e)
-                        {
-                            JDWP_TRACE_PROG("Run: Exception in reading command: " 
-                                << e.what() << " [" << e.ErrCode() 
-                                << "/" << e.TransportErrorCode() << "]");
-                            if (m_isProcessed && !IsDead())
-                            {
-                                char* msg = GetTransportManager().GetLastTransportError();
-                                AgentAutoFree af(msg JDWP_FILE_LINE);
-        
-                                if (e.TransportErrorCode() == JDWPTRANSPORT_ERROR_OUT_OF_MEMORY) {
-                                    JDWP_DIE(e.what() << " [" << e.ErrCode() << "/"
-                                                << e.TransportErrorCode() << "]: " << msg);
-                                } else {
-                                    JDWP_ERROR(e.what() << " [" << e.ErrCode() << "/"
-                                                << e.TransportErrorCode() << "]: " << msg);
-                                }
-                            }
-                            break;
-                        }
-        
-                        // execute command and prevent from reset while execution
-                        {
-                            MonitorAutoLock lock(m_executionMonitor JDWP_FILE_LINE);
-                            m_cmdDispatcher.ExecCommand(jni, &m_cmdParser);
+    int ret;
+    MonitorAutoLock lock(m_completionMonitor JDWP_FILE_LINE);
+    TransportManager &transport = GetTransportManager();
+    
+    // run multiplle sessions in a loop
+    for (; ;)
+    {
+        // connect for new session
+        JDWP_TRACE(LOG_RELEASE, (LOG_PROG_FL, "Run: start new session"));
+        ret = transport.Connect();
+        if (ret != JDWP_ERROR_NONE) {
+            AgentException aex = GetExceptionManager().GetLastException();
+            JDWP_TRACE(LOG_RELEASE, (LOG_PROG_FL, "Run: Exception in connection: %s", aex.GetExceptionMessage(jni)));
+            if (!IsDead()) {
+                JDWP_TRACE(LOG_RELEASE, (LOG_ERROR_FL, "Run: Exception in connection: %s", aex.GetExceptionMessage(jni)));
+                /* In server case, attempt to reaccept while the VM is alive */
+                if (AgentBase::GetOptionParser().GetServer()) {
+                    ret = ResetAll(jni);
+                    if (ret != JDWP_ERROR_NONE) {
+                        AgentException aex = GetExceptionManager().GetLastException();
+                        JDWP_TRACE(LOG_RELEASE, (LOG_ERROR_FL, "Error calling ResetAll(): %s", aex.GetExceptionMessage(jni)));
+                        if (!IsDead()) {                                            
+                            ::exit(1);
                         }
+                        break;
                     }
+                    continue;
                 }
-                catch (const AgentException& e)
-                {
-                    JDWP_TRACE_PROG("Run: Exception in executing command: "
-                                    << e.what() << " [" << e.ErrCode() << "]");
-                    if (!IsDead()) {
-                        JDWP_ERROR(e.what() << " [" << e.ErrCode() << "]");
+                ::exit(1);
+            }
+            break;
+        }
+
+        // inform that new session started
+        GetEventDispatcher().NewSession();
+
+        // add internal request for automatic VMDeath event with no modifiers
+        ret = GetRequestManager().AddInternalRequest(jni,
+            new AgentEventRequest(JDWP_EVENT_VM_DEATH, JDWP_SUSPEND_NONE));
+        if (ret != JDWP_ERROR_NONE) {
+            AgentException aex = GetExceptionManager().GetLastException();
+             if (!IsDead()) {
+                JDWP_TRACE(LOG_RELEASE, (LOG_ERROR_FL, "Run: Exception in executing command: %s", aex.GetExceptionMessage(jni)));
+            }
+            goto reset;
+        }
+
+        // start session and execute commands
+        // release events
+        GetEventDispatcher().ReleaseEvents();
+
+        // read and execute commands
+        m_isProcessed = true;
+        while (m_isProcessed)
+        {
+            // read command
+            JDWP_TRACE(LOG_RELEASE, (LOG_PROG_FL, "Run: handle next command"));
+            int ret = m_cmdParser.ReadCommand();
+            if (ret != JDWP_ERROR_NONE) {
+                if (m_isProcessed && !IsDead()) {
+                    AgentException aex = GetExceptionManager().GetLastException();
+                    JDWP_TRACE(LOG_RELEASE, (LOG_ERROR_FL, "Run: Exception in reading command: %s", aex.GetExceptionMessage(jni)));
+                    if (aex.ErrCode() == JDWP_ERROR_OUT_OF_MEMORY
+                         || aex.TransportErrCode() == JDWPTRANSPORT_ERROR_OUT_OF_MEMORY) {  
+                        ::exit(1);
                     }
                 }
-        
-                // reset all modules after session finished
-                JDWP_TRACE_PROG("Run: reset session");
-                ResetAll(jni);
-        
-                // no more sessions if VMDeath event occured
-                if (IsDead()) {
-                    JDWP_TRACE_PROG("Run: VM is dead -> shutdown");
-                    break;
-                }
-        
-                // no more sessions in attach mode
-                if (!GetOptionParser().GetServer()) {
-                    JDWP_TRACE_PROG("Run: attach mode -> shutdown");
+                break;
+            }
+
+            if (m_cmdParser.command.GetLength() == 0)
+                break;
+
+            // execute command and prevent from reset while execution
+            {
+                MonitorAutoLock lock(m_executionMonitor JDWP_FILE_LINE);
+                ret = m_cmdDispatcher.ExecCommand(jni, &m_cmdParser);
+                if (ret != JDWP_ERROR_NONE) {
+                    AgentException aex = GetExceptionManager().GetLastException();
+                    JDWP_TRACE(LOG_RELEASE, (LOG_ERROR_FL, "Run: Exception in executing command: %s", aex.GetExceptionMessage(jni)));
                     break;
                 }
             }
         }
-        catch (const AgentException& e)
-        {
-            JDWP_TRACE_PROG("Run: Exception in PacketDispatcher: "
-                            << e.what() << " [" << e.ErrCode() << "]");
-            if (!IsDead()) {
-                JDWP_DIE(e.what() << " [" << e.ErrCode() << "]"); 
+
+reset:
+        // reset all modules after session finished
+        JDWP_TRACE(LOG_RELEASE, (LOG_PROG_FL, "Run: reset session"));
+        ResetAll(jni);
+        if (ret != JDWP_ERROR_NONE) {
+            AgentException aex = GetExceptionManager().GetLastException();
+            JDWP_TRACE(LOG_RELEASE, (LOG_ERROR_FL, "Error calling ResetAll(): %s", aex.GetExceptionMessage(jni)));
+            if (!IsDead()) {                                            
+                ::exit(1);
             }
+            break;
         }
-        
-        // stop also EventDispatcher thread
-        try 
-        {
-            JDWP_TRACE_PROG("Run: stop EventDispatcher");
-            GetEventDispatcher().Stop(jni);
+
+        // no more sessions if VMDeath event occured
+        if (IsDead()) {
+            JDWP_TRACE(LOG_RELEASE, (LOG_PROG_FL, "Run: VM is dead -> shutdown"));
+            break;
         }
-        catch (const AgentException& e)
-        {
-            // just report an error, cannot do anything else
-            JDWP_ERROR("Exception in stopping EventDispatcher: "
-                            << e.what() << " [" << e.ErrCode() << "]");
+
+        // no more sessions in attach mode
+        if (!GetOptionParser().GetServer()) {
+            JDWP_TRACE(LOG_RELEASE, (LOG_PROG_FL, "Run: attach mode -> shutdown"));
+            break;
         }
+    }
+    
+    // stop also EventDispatcher thread
+    JDWP_TRACE(LOG_RELEASE, (LOG_PROG_FL, "Run: stop EventDispatcher"));
+    GetEventDispatcher().Stop(jni);
 
         // release completion monitor and wait forever until VM kills this thread
         // TODO: remove this workaround to prevent from resource leak
 	// This is the old completion mechanism fixed in HARMONY-5019
 //        m_completionMonitor->Wait(0);
-    }
-    catch (const AgentException& e)
-    {
-        // just report an error, cannot do anything else
-        JDWP_ERROR("Exception in PacketDispatcher synchronization: "
-                        << e.what() << " [" << e.ErrCode() << "]");
-    }
+
 }
 
 //-----------------------------------------------------------------------------
 
 void 
-PacketDispatcher::Stop(JNIEnv *jni) throw(AgentException)
+PacketDispatcher::Stop(JNIEnv *jni)
 {
-    JDWP_TRACE_ENTRY("Stop()");
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "Stop()"));
 
     // cause thread loop to break
     m_isProcessed = false;
     
     // close transport first, but not while executing current command
-    JDWP_TRACE_PROG("Stop: close agent connection");
+    JDWP_TRACE(LOG_RELEASE, (LOG_PROG_FL, "Stop: close agent connection"));
     if (m_executionMonitor != 0) {
         MonitorAutoLock lock(m_executionMonitor JDWP_FILE_LINE);
         GetTransportManager().Clean();
@@ -253,11 +224,11 @@
 }
 
 void 
-PacketDispatcher::Clean(JNIEnv *jni) throw(AgentException)
+PacketDispatcher::Clean(JNIEnv *jni)
 {
-    JDWP_TRACE_ENTRY("Clean(" << jni << ')');
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "Clean(%p)", jni));
 
-    JDWP_TRACE_PROG("Clean: clean internal data");
+    JDWP_TRACE(LOG_RELEASE, (LOG_PROG_FL, "Clean: clean internal data"));
 
     // do not delete m_completionMonitor because thread is waiting on it
     // TODO: remove this workaround to prevent from resource leak
@@ -274,34 +245,43 @@
 }
 
 void 
-PacketDispatcher::Reset(JNIEnv *jni) throw(AgentException)
+PacketDispatcher::Reset(JNIEnv *jni)
 { 
-    JDWP_TRACE_ENTRY("Reset(" << jni << ')');
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "Reset(%p)", jni));
 
     // cause thread loop to break
-    JDWP_TRACE_PROG("Reset: reset session");
+    JDWP_TRACE(LOG_RELEASE, (LOG_PROG_FL, "Reset: reset session"));
     m_isProcessed = false; 
 }
 
-void 
-PacketDispatcher::ResetAll(JNIEnv *jni) throw(AgentException)
+int 
+PacketDispatcher::ResetAll(JNIEnv *jni)
 {
-    JDWP_TRACE_ENTRY("ResetAll(" << jni << ")");
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "ResetAll(%p)", jni));
 
     // reset all modules, but not while executing current command 
     if (m_executionMonitor != 0) {
         MonitorAutoLock lock(m_executionMonitor JDWP_FILE_LINE);
 
-        JDWP_TRACE_PROG("ResetAll: reset all modules");
+        JDWP_TRACE(LOG_RELEASE, (LOG_PROG_FL, "ResetAll: reset all modules"));
+
+        int ret;
+        m_cmdParser.Reset(jni);
+        ret = GetThreadManager().Reset(jni);
+        JDWP_CHECK_RETURN(ret);
 
-        GetThreadManager().Reset(jni);
         GetRequestManager().Reset(jni);
         GetEventDispatcher().Reset(jni);
-        GetTransportManager().Reset();
+
+        ret = GetTransportManager().Reset();
+        JDWP_CHECK_RETURN(ret);
+
         GetPacketDispatcher().Reset(jni);
         GetClassManager().Reset(jni);
         GetObjectManager().Reset(jni);
     }
+
+    return JDWP_ERROR_NONE;
 }
 
 //-----------------------------------------------------------------------------
@@ -309,7 +289,7 @@
 void JNICALL
 PacketDispatcher::StartFunction(jvmtiEnv* jvmti_env, JNIEnv* jni, void* arg)
 {
-    JDWP_TRACE_ENTRY("StartFunction(" << jvmti_env << "," << jni << "," << arg << ")");
+    JDWP_TRACE_ENTRY(LOG_RELEASE, (LOG_FUNC_FL, "StartFunction(%p,%p,%p)", jvmti_env, jni, arg));
 
     (reinterpret_cast<PacketDispatcher *>(arg))->Run(jni);
 }