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 [10/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/nativ...
Modified: harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/PacketDispatcher.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/PacketDispatcher.h?rev=794726&r1=794725&r2=794726&view=diff
==============================================================================
--- harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/PacketDispatcher.h (original)
+++ harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/PacketDispatcher.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 Vitaly A. Provodin
- * @version $Revision: 1.8.2.1 $
- */
-
/**
* @file
* PacketDispatcher.h
@@ -65,7 +59,7 @@
/**
* Constructs a new <code>PacketDispatcher</code> object.
*/
- PacketDispatcher() throw();
+ PacketDispatcher();
/**
* Initializes the <code>PacketDispatcher</code>'s thread.
@@ -74,7 +68,7 @@
*
* @exception If any error occurs, <code>AgentException</code> is thrown.
*/
- void Init(JNIEnv *jni) throw(AgentException);
+ void Init(JNIEnv *jni);
/**
* Starts the <code>PacketDispatcher</code>'s thread.
@@ -83,7 +77,7 @@
*
* @exception If any error occurs, <code>AgentException</code> is thrown.
*/
- void Start(JNIEnv *jni) throw(AgentException);
+ int Start(JNIEnv *jni);
/**
* Stops the <code>PacketDispatcher</code>'s thread.
@@ -92,7 +86,7 @@
*
* @exception If any error occurs, <code>AgentException</code> is thrown.
*/
- void Stop(JNIEnv *jni) throw(AgentException);
+ void Stop(JNIEnv *jni);
/**
* Resets the <code>PacketDispatcher</code> object.
@@ -101,7 +95,7 @@
*
* @exception If any error occurs, <code>AgentException</code> is thrown.
*/
- void Reset(JNIEnv *jni) throw(AgentException);
+ void Reset(JNIEnv *jni);
/**
* Cleans the <code>PacketDispatcher</code> object.
@@ -110,7 +104,7 @@
*
* @exception If any error occurs, <code>AgentException</code> is thrown.
*/
- void Clean(JNIEnv *jni) throw(AgentException);
+ void Clean(JNIEnv *jni);
/**
* Resets all agent modules.
@@ -119,7 +113,7 @@
*
* @exception If any error occurs, <code>AgentException</code> is thrown.
*/
- void ResetAll(JNIEnv *jni) throw(AgentException);
+ int ResetAll(JNIEnv *jni);
/**
* Shutdowns all agent modules.
@@ -128,7 +122,7 @@
*
* @exception If any error occurs, <code>AgentException</code> is thrown.
*/
-// void ShutdownAll(JNIEnv *jni) throw(AgentException);
+// void ShutdownAll(JNIEnv *jni);
/**
* Determines if the <code>PacketDispatcher</code> object is already
Modified: harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/PacketParser.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/PacketParser.cpp?rev=794726&r1=794725&r2=794726&view=diff
==============================================================================
--- harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/PacketParser.cpp (original)
+++ harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/PacketParser.cpp Thu Jul 16 15:57:37 2009
@@ -15,23 +15,23 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-/**
- * @author Anton V. Karnachuk
- * @version $Revision: 1.18 $
- */
-// PacketParser.cpp: implementation of the PacketParser class.
-//
-//////////////////////////////////////////////////////////////////////
-
#include "PacketParser.h"
#include "jdwpTypes.h"
+#include "hycomp.h"
#include "MemoryManager.h"
#include "ObjectManager.h"
#include "TransportManager.h"
#include "ClassManager.h"
+#include "ExceptionManager.h"
+
+#include <string.h>
-#include <cstring>
+// Defined to parse bytes order for x86 platform
+#ifdef HY_LITTLE_ENDIAN
+#define IS_LITTLE_ENDIAN_PLATFORM 1
+#else
+#define IS_LITTLE_ENDIAN_PLATFORM 0
+#endif
using namespace jdwp;
@@ -41,6 +41,9 @@
const size_t ALLOCATION_STEP = 0x10;
const jbyte PACKET_IS_UNINITIALIZED = 0x03;
+// Constant defining initial value for ReferenceTypeID to be different from ObjectID values
+extern const ReferenceTypeID REFTYPEID_MINIMUM;
+
// GCList
PacketWrapper::GCList::GCList() :
m_memoryRefAllocatedSize(0),
@@ -57,9 +60,6 @@
while (m_memoryRefPosition-- > 0) {
GetMemoryManager().Free(m_memoryRef[m_memoryRefPosition] JDWP_FILE_LINE);
}
- GetMemoryManager().Free(m_memoryRef JDWP_FILE_LINE);
- m_memoryRef = 0;
- m_memoryRefAllocatedSize = 0;
m_memoryRefPosition = 0;
}
@@ -67,14 +67,26 @@
while (m_globalRefPosition-- > 0) {
jni->DeleteGlobalRef(m_globalRef[m_globalRefPosition]);
}
+ m_globalRefPosition = 0;
+ }
+}
+
+void PacketWrapper::GCList::ReleaseData() {
+ Reset(AgentBase::GetJniEnv());
+ if (m_memoryRef != 0) {
+ GetMemoryManager().Free(m_memoryRef JDWP_FILE_LINE);
+ m_memoryRef = 0;
+ m_memoryRefAllocatedSize = 0;
+ }
+
+ if (m_globalRef != 0) {
GetMemoryManager().Free(m_globalRef JDWP_FILE_LINE);
m_globalRef = 0;
m_globalRefAllocatedSize = 0;
- m_globalRefPosition = 0;
}
}
-void PacketWrapper::GCList::StoreStringRef(char* ref) throw (OutOfMemoryException) {
+void PacketWrapper::GCList::StoreStringRef(char* ref){
if (m_memoryRefPosition >= m_memoryRefAllocatedSize) {
// then reallocate buffer
size_t oldAllocatedSize = this->m_memoryRefAllocatedSize;
@@ -91,7 +103,7 @@
m_memoryRef[m_memoryRefPosition++] = ref;
}
-void PacketWrapper::GCList::StoreGlobalRef(jobject globalRef) throw (OutOfMemoryException) {
+void PacketWrapper::GCList::StoreGlobalRef(jobject globalRef){
if (m_globalRefPosition >= m_globalRefAllocatedSize) {
// then reallocate buffer
size_t oldAllocatedSize = m_globalRefAllocatedSize;
@@ -151,6 +163,17 @@
m_packet.type.cmd.flags = PACKET_IS_UNINITIALIZED;
}
+void PacketWrapper::ReleaseData() {
+ m_garbageList.ReleaseData();
+ // free packet's data
+ if (m_packet.type.cmd.data!=0) {
+ GetMemoryManager().Free(m_packet.type.cmd.data JDWP_FILE_LINE);
+ m_packet.type.cmd.data = 0;
+ }
+
+ m_packet.type.cmd.flags = PACKET_IS_UNINITIALIZED;
+}
+
bool PacketWrapper::IsPacketInitialized() {
return ((m_packet.type.cmd.flags & PACKET_IS_UNINITIALIZED) == 0);
}
@@ -173,75 +196,77 @@
// InputPacketParser - sequential reading of m_packet data
//////////////////////////////////////////////////////////////////////
-void InputPacketParser::ReadPacketFromTransport() throw (TransportException) {
+int InputPacketParser::ReadPacketFromTransport() {
JDWP_ASSERT(!IsPacketInitialized());
- GetTransportManager().Read(&m_packet);
+ return GetTransportManager().Read(&m_packet);
}
-void InputPacketParser::ReadBigEndianData(void* data, int len) throw (InternalErrorException) {
+void InputPacketParser::ReadBigEndianData(void* data, int len) {
JDWP_ASSERT(IsPacketInitialized());
if (m_position+len>m_packet.type.cmd.len-JDWP_MIN_PACKET_LENGTH) {
- throw InternalErrorException();
+ JDWP_TRACE(LOG_RELEASE, (LOG_ERROR_FL, "Error reading data - attempting to read past end of packet"));
+ return;
}
- #if IS_BIG_ENDIAN_PLATFORM
+ #if IS_LITTLE_ENDIAN_PLATFORM
jbyte* from = static_cast<jbyte*>(&m_packet.type.cmd.data[m_position]);
jbyte* to = static_cast<jbyte*>(data);
for (int i=0; i<len; i++) {
to[i] = from[len-i-1];
}
#else
- memcpy(data, &m_packet.type.cmd.data[m_position], length);
+ memcpy(data, &m_packet.type.cmd.data[m_position], len);
#endif
m_position += len;
}
-void InputPacketParser::ReadRawData(void* data, int len) throw (InternalErrorException) {
+/*void InputPacketParser::ReadRawData(void* data, int len) {
JDWP_ASSERT(IsPacketInitialized());
if (m_position+len>m_packet.type.cmd.len-JDWP_MIN_PACKET_LENGTH) {
- throw InternalErrorException();
+ AgentException ex(JDWP_ERROR_INTERNAL);
+ THROW(ex);
}
memcpy(data, &m_packet.type.cmd.data[m_position], len);
m_position += len;
-}
+}*/
-jbyte InputPacketParser::ReadByte() throw (InternalErrorException) {
+jbyte InputPacketParser::ReadByte() {
jbyte data = 0;
ReadBigEndianData(&data, sizeof(jbyte));
return data;
}
-jboolean InputPacketParser::ReadBoolean() throw (InternalErrorException) {
+jboolean InputPacketParser::ReadBoolean() {
jboolean data = 0;
ReadBigEndianData(&data, sizeof(jboolean));
return data;
}
-jint InputPacketParser::ReadInt() throw (InternalErrorException) {
+jint InputPacketParser::ReadInt() {
jint res = 0;
ReadBigEndianData(&res, sizeof(jint));
return res;
}
-jlong InputPacketParser::ReadLong() throw (InternalErrorException) {
+jlong InputPacketParser::ReadLong() {
jlong data = 0;
ReadBigEndianData(&data, sizeof(jlong));
return data;
}
-ObjectID InputPacketParser::ReadRawObjectID() throw (InternalErrorException) {
+ObjectID InputPacketParser::ReadRawObjectID() {
ObjectID data = 0;
ReadBigEndianData(&data, OBJECT_ID_SIZE);
return data;
}
-jobject InputPacketParser::ReadObjectIDOrNull(JNIEnv *jni) throw (AgentException) {
+jobject InputPacketParser::ReadObjectIDOrNull(JNIEnv *jni) {
// read raw ObjectID and check for null
ObjectID oid = ReadRawObjectID();
if (oid == 0) {
@@ -250,15 +275,26 @@
// convert to jobject (actually to WeakReference or GlobalReference)
jobject obj = GetObjectManager().MapFromObjectID(jni, oid);
- JDWP_ASSERT(obj != NULL);
+ if (NULL == obj) {
+ JDWP_TRACE(LOG_RELEASE, (LOG_DATA_FL, "MapFromObjectID returned NULL"));
+ AgentException ex(JDWP_ERROR_INVALID_OBJECT);
+ JDWP_SET_EXCEPTION(ex);
+ return 0;
+ }
// make GlobalReference and check if WeakReference was freed
jobject ref = jni->NewGlobalRef(obj);
if (ref == 0) {
if (jni->IsSameObject(obj, 0)) {
- throw AgentException(JDWP_ERROR_INVALID_OBJECT);
+ JDWP_TRACE(LOG_RELEASE, (LOG_ERROR_FL, "Invalid object calling NewGlobalRef"));
+ AgentException ex(JDWP_ERROR_INVALID_OBJECT);
+ JDWP_SET_EXCEPTION(ex);
+ return 0;
} else {
- throw OutOfMemoryException();
+ JDWP_TRACE(LOG_RELEASE, (LOG_ERROR_FL, "Out of memory calling NewGlobalRef"));
+ AgentException ex(JDWP_ERROR_OUT_OF_MEMORY);
+ JDWP_SET_EXCEPTION(ex);
+ return 0;
}
}
@@ -267,32 +303,54 @@
return ref;
}
-jobject InputPacketParser::ReadObjectID(JNIEnv *jni) throw (AgentException) {
+jobject InputPacketParser::ReadObjectID(JNIEnv *jni) {
jobject obj = ReadObjectIDOrNull(jni);
- if (obj == 0) {
- throw AgentException(JDWP_ERROR_INVALID_OBJECT);
- }
return obj;
}
-jclass InputPacketParser::ReadReferenceTypeIDOrNull(JNIEnv *jni) throw (AgentException) {
+jclass InputPacketParser::ReadReferenceTypeIDOrNull(JNIEnv *jni) {
ReferenceTypeID rtid = 0;
ReadBigEndianData(&rtid, REFERENCE_TYPE_ID_SIZE);
+ JDWP_TRACE(LOG_RELEASE, (LOG_DATA_FL, "ReadReferenceTypeIDOrNul: read : ReferenceTypeID=%p", rtid));
+
if (rtid == 0) {
return 0;
}
- // convert to jclass (actually to WeakReference or GlobalReference)
- jclass cls = GetObjectManager().MapFromReferenceTypeID(jni, rtid);
+ jclass cls = 0;
+ if(rtid < REFTYPEID_MINIMUM) {
+ // For a ObjectID, we should convert it to ReferenceTypeID
+ // if it is a ClassObjectID
+ jobject obj = GetObjectManager().MapFromObjectID(jni, rtid);
+ jclass clsType = jni->GetObjectClass(obj);
+ jboolean isClass = jni->IsAssignableFrom(clsType, jni->GetObjectClass(clsType));
+ if (!isClass){
+ JDWP_TRACE(LOG_RELEASE, (LOG_ERROR_FL, "## ReadReferenceTypeIDOrNul: read : ObjectID is not a ClassObjectID"));
+ return 0;
+ }
+
+ cls = static_cast<jclass> (obj);
+ jboolean isValidID = GetObjectManager().FindObjectID(jni, cls, rtid);
+ if(!isValidID){
+ JDWP_TRACE(LOG_RELEASE, (LOG_ERROR_FL, "## ReadReferenceTypeIDOrNul: read : ID is an invalid ObjectID"));
+ return 0;
+ }
+ }else {
+ // convert to jclass (actually to WeakReference or GlobalReference)
+ cls = GetObjectManager().MapFromReferenceTypeID(jni, rtid);
+ }
+
JDWP_ASSERT(cls != 0);
// make GlobalReference and check if WeakReference was freed
jclass ref = static_cast<jclass>(jni->NewGlobalRef(cls));
if (ref == 0) {
if (jni->IsSameObject(cls, 0)) {
- throw AgentException(JDWP_ERROR_INVALID_OBJECT);
+ JDWP_TRACE(LOG_RELEASE, (LOG_ERROR_FL, "Invalid object calling NewGlobalRef"));
+ return 0;
} else {
- throw OutOfMemoryException();
+ JDWP_TRACE(LOG_RELEASE, (LOG_ERROR_FL, "Out of memory calling NewGlobalRef"));
+ return 0;
}
}
@@ -301,36 +359,33 @@
return ref;
}
-jclass InputPacketParser::ReadReferenceTypeID(JNIEnv *jni) throw (AgentException) {
+jclass InputPacketParser::ReadReferenceTypeID(JNIEnv *jni) {
jclass cls = ReadReferenceTypeIDOrNull(jni);
- if (cls == 0) {
- throw AgentException(JDWP_ERROR_INVALID_OBJECT);
- }
return cls;
}
-jfieldID InputPacketParser::ReadFieldID(JNIEnv *jni) throw (AgentException) {
+jfieldID InputPacketParser::ReadFieldID(JNIEnv *jni) {
FieldID fid = 0;
ReadBigEndianData(&fid, FIELD_ID_SIZE);
jfieldID res = GetObjectManager().MapFromFieldID(jni, fid);
return res;
}
-jmethodID InputPacketParser::ReadMethodID(JNIEnv *jni) throw (AgentException) {
+jmethodID InputPacketParser::ReadMethodID(JNIEnv *jni) {
MethodID mid = 0;
ReadBigEndianData(&mid, METHOD_ID_SIZE);
jmethodID res = GetObjectManager().MapFromMethodID(jni, mid);
return res;
}
-jint InputPacketParser::ReadFrameID(JNIEnv *jni) throw (AgentException) {
+jint InputPacketParser::ReadFrameID(JNIEnv *jni) {
FrameID fid;
ReadBigEndianData(&fid, FRAME_ID_SIZE);
jint res = GetObjectManager().MapFromFrameID(jni, fid);
return res;
}
-jdwpLocation InputPacketParser::ReadLocation(JNIEnv *jni) throw (AgentException) {
+jdwpLocation InputPacketParser::ReadLocation(JNIEnv *jni) {
jdwpLocation res;
res.typeTag = static_cast<jdwpTypeTag>(ReadByte());
res.classID = ReadReferenceTypeID(jni);
@@ -339,41 +394,88 @@
return res;
}
-jthread InputPacketParser::ReadThreadID(JNIEnv *jni) throw (AgentException) {
- return static_cast<jthread>(ReadObjectID(jni));
+jthread InputPacketParser::ReadThreadIDOrNull(JNIEnv *jni) {
+ // read raw ThreadID and check for null
+ ObjectID oid = ReadRawObjectID();
+ if (oid == 0) {
+ AgentException ex(JDWP_ERROR_INVALID_THREAD);
+ JDWP_SET_EXCEPTION(ex);
+ return 0;
+ }
+ JDWP_TRACE(LOG_RELEASE, (LOG_DATA_FL, "ReadThreadIDOrNull: read : ThreadID=%lld", oid));
+
+ // if oid is a reference type, throw INVALID_THREAD exception
+ // Bug fix, INVALID_THREAD error reply is required
+ if( GetObjectManager().IsValidReferenceTypeID(jni, oid) ) {
+ AgentException ex(JDWP_ERROR_INVALID_THREAD);
+ JDWP_SET_EXCEPTION(ex);
+ return 0;
+ }
+
+ JDWP_TRACE(LOG_RELEASE, (LOG_DATA_FL, "ReadObjectIDOrNull: read : ObjectID=%lld", oid));
+
+ // convert to jobject (actually to WeakReference or GlobalReference)
+ jobject obj = GetObjectManager().MapFromObjectID(jni, oid);
+ JDWP_TRACE(LOG_RELEASE, (LOG_DATA_FL, "ReadObjectIDOrNull: read : jobject=%p", obj));
+ JDWP_ASSERT(obj != NULL);
+
+ // make GlobalReference and check if WeakReference was freed
+ jobject ref = jni->NewGlobalRef(obj);
+ if (ref == 0) {
+ if (jni->IsSameObject(obj, 0)) {
+ AgentException ex(JDWP_ERROR_INVALID_OBJECT);
+ JDWP_SET_EXCEPTION(ex);
+ return 0;
+ } else {
+ AgentException ex(JDWP_ERROR_OUT_OF_MEMORY);
+ JDWP_SET_EXCEPTION(ex);
+ return 0;
+ }
+ }
+
+ jthread thrd = static_cast<jthread>(ref);
+ // store GlobalReference for futher disposal
+ m_garbageList.StoreGlobalRef(thrd);
+ return thrd;
+}
+
+jthread InputPacketParser::ReadThreadID(JNIEnv *jni) {
+ jthread thrd = ReadThreadIDOrNull(jni);
+ return thrd;
}
-jthreadGroup InputPacketParser::ReadThreadGroupID(JNIEnv *jni) throw (AgentException) {
+jthreadGroup InputPacketParser::ReadThreadGroupID(JNIEnv *jni) {
return static_cast<jthreadGroup>(ReadObjectID(jni));
}
-jstring InputPacketParser::ReadStringID(JNIEnv *jni) throw (AgentException) {
+jstring InputPacketParser::ReadStringID(JNIEnv *jni) {
return static_cast<jstring>(ReadObjectID(jni));
}
-jarray InputPacketParser::ReadArrayID(JNIEnv *jni) throw (AgentException) {
+jarray InputPacketParser::ReadArrayID(JNIEnv *jni) {
return static_cast<jarray>(ReadObjectID(jni));
}
-char* InputPacketParser::ReadStringNoFree() throw (InternalErrorException, OutOfMemoryException) {
+char* InputPacketParser::ReadStringNoFree() {
jint len = ReadInt();
if (m_position+len>m_packet.type.cmd.len) {
- throw InternalErrorException();
+ JDWP_TRACE(LOG_RELEASE, (LOG_ERROR_FL, "Attempting to read past end of packet"));
+ return NULL;
}
char* res = static_cast<char*>(GetMemoryManager().Allocate(len+1 JDWP_FILE_LINE));
- strncpy(res, reinterpret_cast<char*>(&m_packet.type.cmd.data[m_position]), len);
+ memcpy(res, reinterpret_cast<char*>(&m_packet.type.cmd.data[m_position]), len);
res[len] = '\0';
m_position += len;
return res;
}
-char* InputPacketParser::ReadString() throw (InternalErrorException, OutOfMemoryException) {
+char* InputPacketParser::ReadString() {
char* res = ReadStringNoFree();
m_garbageList.StoreStringRef(res);
return res;
}
-jdwpTaggedValue InputPacketParser::ReadValue(JNIEnv *jni) throw (AgentException) {
+jdwpTaggedValue InputPacketParser::ReadValue(JNIEnv *jni) {
//The first byte is a signature byte which is used to identify the type
jdwpTaggedValue tv;
tv.tag = static_cast<jdwpTag>(ReadByte());
@@ -381,7 +483,7 @@
return tv;
}
-jvalue InputPacketParser::ReadUntaggedValue(JNIEnv *jni, jdwpTag tagPtr) throw (AgentException) {
+jvalue InputPacketParser::ReadUntaggedValue(JNIEnv *jni, jdwpTag tagPtr) {
jvalue value;
switch (tagPtr) {
@@ -433,30 +535,30 @@
case JDWP_TAG_CLASS_OBJECT:
value.l = ReadObjectIDOrNull(jni);
break;
- default: JDWP_ERROR("Illegal jdwp-tag value: " << tagPtr);
+ default: JDWP_TRACE(LOG_RELEASE, (LOG_ERROR_FL, "Illegal jdwp-tag value: %d", tagPtr));
}
return value;
}
// InputPacket's private methods
-jchar InputPacketParser::ReadChar() throw (InternalErrorException) {
+jchar InputPacketParser::ReadChar() {
jchar data = 0;
ReadBigEndianData(&data, sizeof(jchar));
return data;
}
-jshort InputPacketParser::ReadShort() throw (InternalErrorException) {
+jshort InputPacketParser::ReadShort() {
jshort data = 0;
ReadBigEndianData(&data, sizeof(jshort));
return data;
}
-jfloat InputPacketParser::ReadFloat() throw (InternalErrorException) {
+jfloat InputPacketParser::ReadFloat() {
jfloat data = 0;
ReadBigEndianData(&data, sizeof(jfloat));
return data;
}
-jdouble InputPacketParser::ReadDouble() throw (InternalErrorException) {
+jdouble InputPacketParser::ReadDouble() {
jdouble data = 0;
ReadBigEndianData(&data, sizeof(jdouble));
return data;
@@ -467,6 +569,11 @@
m_position = 0;
}
+void InputPacketParser::ReleaseData() {
+ PacketWrapper::ReleaseData();
+ m_position = 0;
+}
+
void InputPacketParser::MoveData(JNIEnv *jni, InputPacketParser* to) {
PacketWrapper::MoveData(jni, to);
m_position = 0;
@@ -475,15 +582,19 @@
//////////////////////////////////////////////////////////////////////
// OutputPacketComposer - sequential writing of m_packet data
//////////////////////////////////////////////////////////////////////
-void OutputPacketComposer::WritePacketToTransport() throw (TransportException) {
+int OutputPacketComposer::WritePacketToTransport() {
JDWP_ASSERT(IsPacketInitialized());
- GetTransportManager().Write(&m_packet);
- if ( GetError() == JDWP_ERROR_NONE ) {
+ int ret = GetTransportManager().Write(&m_packet);
+ JDWP_CHECK_RETURN(ret);
+
+ if (GetError() == JDWP_ERROR_NONE) {
IncreaseObjectIDRefCounts();
}
+
+ return JDWP_ERROR_NONE;
}
-void OutputPacketComposer::AllocateMemoryForData(int length) throw (OutOfMemoryException) {
+void OutputPacketComposer::AllocateMemoryForData(int length){
size_t newPosition = m_position + static_cast<size_t>(length);
if (newPosition >= m_allocatedSize) {
// then reallocate buffer
@@ -509,7 +620,7 @@
m_position = newPosition;
}
-void OutputPacketComposer::WriteRawData(const void* data, int length) throw (OutOfMemoryException) {
+void OutputPacketComposer::WriteRawData(const void* data, int length){
AllocateMemoryForData(length);
memcpy(&m_packet.type.cmd.data[m_position], data, length);
@@ -519,11 +630,11 @@
}
-void OutputPacketComposer::WriteBigEndianData(void* data, int length) throw (OutOfMemoryException) {
+void OutputPacketComposer::WriteBigEndianData(void* data, int length){
JDWP_ASSERT(length <= sizeof(jlong));
AllocateMemoryForData(length);
- #if IS_BIG_ENDIAN_PLATFORM
+ #if IS_LITTLE_ENDIAN_PLATFORM
const jbyte* from = static_cast<jbyte*>(const_cast<void*>(data));
jbyte* to = static_cast<jbyte*>(&m_packet.type.cmd.data[m_position]);
for (int i=0; i<length; i++) {
@@ -538,89 +649,86 @@
}
-void OutputPacketComposer::WriteByte(jbyte value) throw (OutOfMemoryException) {
+void OutputPacketComposer::WriteByte(jbyte value){
WriteBigEndianData(&value, sizeof(value));
}
-void OutputPacketComposer::WriteBoolean(jboolean value) throw (OutOfMemoryException) {
+void OutputPacketComposer::WriteBoolean(jboolean value){
WriteBigEndianData(&value, sizeof(value));
}
-void OutputPacketComposer::WriteInt(jint value) throw (OutOfMemoryException) {
+void OutputPacketComposer::WriteInt(jint value){
WriteBigEndianData(&value, sizeof(value));
}
-void OutputPacketComposer::WriteLong(jlong value) throw (OutOfMemoryException) {
+void OutputPacketComposer::WriteLong(jlong value){
WriteBigEndianData(&value, sizeof(value));
}
-void OutputPacketComposer::WriteObjectID(JNIEnv *jni, jobject value) throw (AgentException) {
+void OutputPacketComposer::WriteObjectID(JNIEnv *jni, jobject value) {
ObjectID id = GetObjectManager().MapToObjectID(jni, value);
WriteBigEndianData(&id, OBJECT_ID_SIZE);
RegisterObjectID(id);
}
-void OutputPacketComposer::WriteReferenceTypeID(JNIEnv *jni, jclass value) throw (OutOfMemoryException) {
+void OutputPacketComposer::WriteReferenceTypeID(JNIEnv *jni, jclass value){
ReferenceTypeID id = GetObjectManager().MapToReferenceTypeID(jni, value);
WriteBigEndianData(&id, REFERENCE_TYPE_ID_SIZE);
}
-void OutputPacketComposer::WriteFieldID(JNIEnv *jni, jfieldID value) throw (OutOfMemoryException) {
+void OutputPacketComposer::WriteFieldID(JNIEnv *jni, jfieldID value){
FieldID id = GetObjectManager().MapToFieldID(jni, value);
WriteBigEndianData(&id, FIELD_ID_SIZE);
}
-void OutputPacketComposer::WriteMethodID(JNIEnv *jni, jmethodID value) throw (OutOfMemoryException) {
+void OutputPacketComposer::WriteMethodID(JNIEnv *jni, jmethodID value){
MethodID id = GetObjectManager().MapToMethodID(jni, value);
WriteBigEndianData(&id, METHOD_ID_SIZE);
}
-void OutputPacketComposer::WriteFrameID(JNIEnv *jni, jthread jvmThread, jint frameDepth, jint framesCount)
-throw (OutOfMemoryException) {
+void OutputPacketComposer::WriteFrameID(JNIEnv *jni, jthread jvmThread, jint frameDepth, jint framesCount) {
FrameID id = GetObjectManager().MapToFrameID(jni, jvmThread, frameDepth, framesCount);
WriteBigEndianData(&id, FRAME_ID_SIZE);
}
void OutputPacketComposer::WriteLocation(JNIEnv *jni, jdwpTypeTag typeTag, jclass clazz,
- jmethodID method, jlocation location)
-throw (OutOfMemoryException) {
+ jmethodID method, jlocation location) {
WriteByte(static_cast<jbyte>(typeTag));
WriteReferenceTypeID(jni, clazz);
WriteMethodID(jni, method);
WriteLong(static_cast<jlong>(location));
}
-void OutputPacketComposer::WriteLocation(JNIEnv *jni, jdwpLocation *location) throw (OutOfMemoryException) {
+void OutputPacketComposer::WriteLocation(JNIEnv *jni, jdwpLocation *location){
WriteLocation(jni, location->typeTag, location->classID, location->methodID, location->loc);
}
-void OutputPacketComposer::WriteThreadID(JNIEnv *jni, jthread value) throw (OutOfMemoryException) {
+void OutputPacketComposer::WriteThreadID(JNIEnv *jni, jthread value){
WriteObjectID(jni, value);
}
-void OutputPacketComposer::WriteThreadGroupID(JNIEnv *jni, jthreadGroup value) throw (OutOfMemoryException) {
+void OutputPacketComposer::WriteThreadGroupID(JNIEnv *jni, jthreadGroup value){
WriteObjectID(jni, value);
}
-void OutputPacketComposer::WriteStringID(JNIEnv *jni, jstring value) throw (OutOfMemoryException) {
+void OutputPacketComposer::WriteStringID(JNIEnv *jni, jstring value){
WriteObjectID(jni, value);
}
-void OutputPacketComposer::WriteArrayID(JNIEnv *jni, jarray value) throw (OutOfMemoryException) {
+void OutputPacketComposer::WriteArrayID(JNIEnv *jni, jarray value){
WriteObjectID(jni, value);
}
-void OutputPacketComposer::WriteString(const char* value) throw (OutOfMemoryException) {
- jint len = static_cast<jint>((value == 0) ? 0 : std::strlen(value));
+void OutputPacketComposer::WriteString(const char* value){
+ jint len = static_cast<jint>((value == 0) ? 0 : strlen(value));
WriteString(value, len);
}
-void OutputPacketComposer::WriteString(const char* value, jint length) throw (OutOfMemoryException) {
+void OutputPacketComposer::WriteString(const char* value, jint length){
WriteBigEndianData(&length, sizeof(jint));
if (length > 0) {
WriteRawData(value, length);
}
}
-void OutputPacketComposer::WriteUntaggedValue(JNIEnv *jni, jdwpTag tag, jvalue value)
-throw (OutOfMemoryException) {
+void OutputPacketComposer::WriteUntaggedValue(JNIEnv *jni, jdwpTag tag, jvalue value) {
//The first byte is a signature byte which is used to identify the type
switch (tag) {
case JDWP_TAG_ARRAY:
@@ -671,43 +779,52 @@
case JDWP_TAG_CLASS_OBJECT:
WriteObjectID(jni, value.l);
break;
- default: JDWP_ERROR("Illegal jdwp-tag value: " << tag);
+ default: JDWP_TRACE(LOG_RELEASE, (LOG_ERROR_FL, "Illegal jdwp-tag value: %d", tag));
}
}
-void OutputPacketComposer::WriteValue(JNIEnv *jni, jdwpTag tag, jvalue value) throw (OutOfMemoryException) {
+void OutputPacketComposer::WriteValue(JNIEnv *jni, jdwpTag tag, jvalue value){
WriteByte(static_cast<jbyte>(tag));
WriteUntaggedValue(jni, tag, value);
}
-void OutputPacketComposer::WriteTaggedObjectID(JNIEnv *jni, jobject object) throw (OutOfMemoryException) {
+void OutputPacketComposer::WriteTaggedObjectID(JNIEnv *jni, jobject object){
jdwpTag tag = GetClassManager().GetJdwpTag(jni, object);
WriteByte(static_cast<jbyte>(tag));
WriteObjectID(jni, object);
}
void OutputPacketComposer::WriteValues(JNIEnv *jni, jdwpTag tag,
- jint length, jvalue* value) throw (OutOfMemoryException) {
+ jint length, jvalue* value){
WriteByte(static_cast<jbyte>(tag));
WriteInt(length);
for (int i=0; i<length; i++)
WriteUntaggedValue(jni, tag, value[i]);
}
-void OutputPacketComposer::WriteByteArray(jbyte* byte, jint length) throw (OutOfMemoryException) {
+void OutputPacketComposer::WriteByteArray(jbyte* byte, jint length){
WriteInt(length);
WriteRawData(byte, length);
}
void OutputPacketComposer::Reset(JNIEnv *jni) {
- PacketWrapper::Reset(jni);
+ // clear links
+ m_garbageList.Reset(jni);
+ m_packet.type.cmd.flags = PACKET_IS_UNINITIALIZED;
m_position = 0;
- m_allocatedSize = 0;
if (m_registeredObjectIDCount != 0) {
+ m_registeredObjectIDCount = 0;
+ }
+}
+
+void OutputPacketComposer::ReleaseData() {
+ PacketWrapper::ReleaseData();
+ m_allocatedSize = 0;
+
+ if (m_registeredObjectIDTable != 0) {
GetMemoryManager().Free(m_registeredObjectIDTable JDWP_FILE_LINE);
m_registeredObjectIDTable = 0;
m_registeredObjectIDCount = 0;
- m_registeredObjectIDTableSise = 0;
}
}
@@ -718,21 +835,20 @@
}
// OutputPacketComposer's private methods
-void OutputPacketComposer::WriteChar(jchar value) throw (OutOfMemoryException) {
+void OutputPacketComposer::WriteChar(jchar value){
WriteBigEndianData(&value, sizeof(value));
}
-void OutputPacketComposer::WriteShort(jshort value) throw (OutOfMemoryException) {
+void OutputPacketComposer::WriteShort(jshort value){
WriteBigEndianData(&value, sizeof(value));
}
-void OutputPacketComposer::WriteFloat(jfloat value) throw (OutOfMemoryException) {
+void OutputPacketComposer::WriteFloat(jfloat value){
WriteBigEndianData(&value, sizeof(value));
}
-void OutputPacketComposer::WriteDouble(jdouble value) throw (OutOfMemoryException) {
+void OutputPacketComposer::WriteDouble(jdouble value){
WriteBigEndianData(&value, sizeof(value));
}
-void OutputPacketComposer::RegisterObjectID(ObjectID objectID)
- throw (AgentException) {
+void OutputPacketComposer::RegisterObjectID(ObjectID objectID) {
if ( objectID == JDWP_OBJECT_ID_NULL ) {
return;
@@ -766,37 +882,40 @@
}
// new reply
-void OutputPacketComposer::CreateJDWPReply(jint id, jdwpError errorCode) throw (InternalErrorException) {
+void OutputPacketComposer::CreateJDWPReply(jint id, jdwpError errorCode) {
JDWP_ASSERT(!IsPacketInitialized());
m_packet.type.reply.id = id;
m_packet.type.reply.len = JDWP_MIN_PACKET_LENGTH;
m_packet.type.reply.flags = JDWP_FLAG_REPLY_PACKET;
- m_packet.type.reply.errorCode = errorCode;
+ m_packet.type.reply.errorCode = (jshort)errorCode;
}
// new event
-void OutputPacketComposer::CreateJDWPEvent(jint id, jdwpCommandSet commandSet, jdwpCommand command)
-throw (InternalErrorException) {
+void OutputPacketComposer::CreateJDWPEvent(jint id, jdwpCommandSet commandSet, jdwpCommand command) {
JDWP_ASSERT(!IsPacketInitialized());
m_packet.type.cmd.id = id;
m_packet.type.cmd.len = JDWP_MIN_PACKET_LENGTH;
m_packet.type.cmd.flags = 0;
- m_packet.type.cmd.cmdSet = commandSet;
- m_packet.type.cmd.cmd = command;
+ m_packet.type.cmd.cmdSet = (jbyte)commandSet;
+ m_packet.type.cmd.cmd = (jbyte)command;
}
///////////////////////////////////////////////////////////////////////////////
// CommandParser
///////////////////////////////////////////////////////////////////////////////
-void CommandParser::ReadCommand() throw (TransportException) {
- command.ReadPacketFromTransport();
+int CommandParser::ReadCommand() {
+ int ret = command.ReadPacketFromTransport();
+ JDWP_CHECK_RETURN(ret);
reply.CreateJDWPReply(command.GetId(), JDWP_ERROR_NONE);
+ return JDWP_ERROR_NONE;
}
-void CommandParser::WriteReply(JNIEnv *jni) throw (TransportException) {
- reply.WritePacketToTransport();
+int CommandParser::WriteReply(JNIEnv *jni) {
+ int ret = reply.WritePacketToTransport();
+ JDWP_CHECK_RETURN(ret);
Reset(jni);
+ return JDWP_ERROR_NONE;
}
void CommandParser::Reset(JNIEnv *jni) {
@@ -809,6 +928,11 @@
reply.MoveData(jni, &to->reply);
}
+CommandParser::~CommandParser() {
+ reply.ReleaseData();
+ command.ReleaseData();
+}
+
///////////////////////////////////////////////////////////////////////////////
// EventComposer
///////////////////////////////////////////////////////////////////////////////
@@ -823,16 +947,19 @@
m_isWaiting = false;
m_isReleased = false;
m_isAutoDeathEvent = false;
- event.WriteByte(sp);
+ event.WriteByte((jbyte)sp);
+}
+
+EventComposer::~EventComposer() {
+ event.ReleaseData();
}
void EventComposer::WriteThread(JNIEnv *jni, jthread thread)
- throw (OutOfMemoryException)
{
event.WriteThreadID(jni, thread);
m_thread = jni->NewGlobalRef(thread);
if (m_thread == 0) {
- throw OutOfMemoryException();
+ JDWP_TRACE(LOG_RELEASE, (LOG_ERROR_FL, "Out of memory calling NewGlobalRef"));
}
}
@@ -845,9 +972,11 @@
event.Reset(jni);
}
-void EventComposer::WriteEvent(JNIEnv *jni) throw (TransportException)
+int EventComposer::WriteEvent(JNIEnv *jni)
{
- event.WritePacketToTransport();
+ int ret = event.WritePacketToTransport();
+ JDWP_CHECK_RETURN(ret);
m_isSent = true;
event.Reset(jni);
+ return JDWP_ERROR_NONE;
}
Modified: harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/PacketParser.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/PacketParser.h?rev=794726&r1=794725&r2=794726&view=diff
==============================================================================
--- harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/PacketParser.h (original)
+++ harmony/enhanced/jdktools/branches/java6/modules/jpda/src/main/native/jdwp/common/agent/core/PacketParser.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 Anton V. Karnachuk
- * @version $Revision: 1.16.2.1 $
- */
-
/**
* @file
* PacketParser.h
@@ -120,14 +114,14 @@
*
* @param ref - string
*/
- void StoreStringRef(char* ref) throw (OutOfMemoryException);
+ void StoreStringRef(char* ref);
/**
* Stores the reference to the JNI global reference.
*
* @param globalRef - global reference
*/
- void StoreGlobalRef(jobject globalRef) throw (OutOfMemoryException);
+ void StoreGlobalRef(jobject globalRef);
/**
* Deletes all stored references.
@@ -136,6 +130,8 @@
*/
void Reset(JNIEnv *jni);
+ void ReleaseData();
+
/**
* Moves all data to other GCList instance.
*
@@ -165,6 +161,8 @@
*/
void Reset(JNIEnv *jni);
+ void ReleaseData();
+
/**
* Moves all data to another PacketWrapper instance.
*
@@ -199,7 +197,7 @@
* @throws InternalErrorException if not enough bytes in
* the packet data exist.
*/
- void ReadPacketFromTransport() throw (TransportException);
+ int ReadPacketFromTransport();
/**
* Sequentially reads the byte value from the JDWP packet's data.
@@ -209,7 +207,7 @@
* @throws InternalErrorException if the number of bytes in the packet
* data is not enough.
*/
- jbyte ReadByte() throw (InternalErrorException);
+ jbyte ReadByte();
/**
* Sequentially reads boolean value from the JDWP packet's data.
@@ -219,7 +217,7 @@
* @throws InternalErrorException if the number of bytes
* in the packet data is not enough.
*/
- jboolean ReadBoolean() throw (InternalErrorException);
+ jboolean ReadBoolean();
/**
* Sequentially reads int value from the JDWP packet's data.
@@ -229,7 +227,7 @@
* @throws InternalErrorException if the number
* of bytes in the packet data is not enough.
*/
- jint ReadInt() throw (InternalErrorException);
+ jint ReadInt();
/**
* Sequentially reads a long value from the JDWP packet's data.
@@ -239,7 +237,7 @@
* @throws InternalErrorException if the number
* of bytes in the packet data is not enough.
*/
- jlong ReadLong() throw (InternalErrorException);
+ jlong ReadLong();
/**
* Sequentially reads <code>ObjectID</code> value from the JDWP
@@ -253,7 +251,7 @@
* @throws InternalErrorException if the number of bytes
* in the packet data is not enough.
*/
- ObjectID ReadRawObjectID() throw (InternalErrorException);
+ ObjectID ReadRawObjectID();
/**
* Sequentially reads <code>ObjectID</code> value from JDWP
@@ -279,7 +277,7 @@
* <code>ObjectID</code> is invalid or the object was
* garbage-collected.
*/
- jobject ReadObjectIDOrNull(JNIEnv *jni) throw (AgentException);
+ jobject ReadObjectIDOrNull(JNIEnv *jni);
/**
* Sequentially reads <code>ObjectID</code> value from the JDWP
@@ -302,7 +300,7 @@
* @throws AgentException(JDWP_ERROR_NULL_POINTER) if
* <code>ObjectID</code> is null.
*/
- jobject ReadObjectID(JNIEnv *jni) throw (AgentException);
+ jobject ReadObjectID(JNIEnv *jni);
/**
* Sequentially reads the <code>ReferenceTypeID</code> value from
@@ -330,7 +328,7 @@
* @throws AgentException(JDWP_ERROR_INVALID_OBJECT) if
* the corresponding class was garbage-collected.
*/
- jclass ReadReferenceTypeIDOrNull(JNIEnv *jni) throw (AgentException);
+ jclass ReadReferenceTypeIDOrNull(JNIEnv *jni);
/**
* Sequentially reads the <code>ReferenceTypeID</code> value from the
@@ -359,7 +357,7 @@
* @throws AgentException(JDWP_ERROR_NULL_POINTER)
* if <code>ReferenceTypeID</code> is null.
*/
- jclass ReadReferenceTypeID(JNIEnv *jni) throw (AgentException);
+ jclass ReadReferenceTypeID(JNIEnv *jni);
/**
* Sequentially reads the <code>FieldID</code> value from the JDWP
@@ -375,7 +373,7 @@
* @throws OutOfMemoryException if cannot create
* a global reference.
*/
- jfieldID ReadFieldID(JNIEnv *jni) throw (AgentException);
+ jfieldID ReadFieldID(JNIEnv *jni);
/**
* Sequentially reads the <code>MethodID</code> value from the JDWP
@@ -391,7 +389,7 @@
* @throws OutOfMemoryException if cannot create
* a global reference.
*/
- jmethodID ReadMethodID(JNIEnv *jni) throw (AgentException);
+ jmethodID ReadMethodID(JNIEnv *jni);
/**
* Sequentially reads the <code>FrameID</code> value from the JDWP
@@ -406,7 +404,7 @@
* @throws OutOfMemoryException if cannot create a
* global reference.
*/
- jint ReadFrameID(JNIEnv *jni) throw (AgentException);
+ jint ReadFrameID(JNIEnv *jni);
/**
* Sequentially reads the <code>Location</code> object from the
@@ -422,9 +420,35 @@
* @throws OutOfMemoryException if cannot create a
* global reference.
*/
- jdwpLocation ReadLocation(JNIEnv *jni) throw (AgentException);
+ jdwpLocation ReadLocation(JNIEnv *jni);
/**
+ * Sequentially reads <code>ThreadID</code> value from JDWP
+ * packet's data and converts it to <code>jthread</code> through
+ * <code>ObjectManager</code>. Returns the JNI global reference to
+ * <code>jthread</code> or null.
+ * The given global reference is stored inside PacketWrapper
+ * and can be destroyed with the method Reset().
+ * The given method should be used only in special cases where null
+ * <code>ThreadID</code> is acceptible.
+ * In usual cases the method <code>ReadThreadID()</code> should be used.
+ *
+ * @param jni - the JNI interface pointer
+ *
+ * @return The JNI global reference to <code>jthread</code> or null
+ * reference for null <code>ThreadID</code>.
+ *
+ * @throws InternalErrorException if the number of bytes
+ * in the packet data is not enough.
+ * @throws OutOfMemoryException if cannot create a global
+ * reference.
+ * @throws AgentException(JDWP_ERROR_INVALID_OBJECT) if
+ * <code>ThreadID</code> is invalid or the object was
+ * garbage-collected.
+ */
+ jthread ReadThreadIDOrNull(JNIEnv *jni);
+
+ /**
* Sequentially reads the <code>ThreadID</code> value from the JDWP
* packet's data and convert it to <code>jthreadGroup</code> through
* <code>ObjectManager</code>. Returns JNI global reference to the
@@ -445,7 +469,7 @@
* @throws AgentException(JDWP_ERROR_NULL_POINTER) if
* <code>ThreadID</code> is null.
*/
- jthread ReadThreadID(JNIEnv *jni) throw (AgentException);
+ jthread ReadThreadID(JNIEnv *jni);
/**
* Sequentially reads the <code>ThreadGroupID</code> value from the
@@ -469,7 +493,7 @@
* @throws AgentException(JDWP_ERROR_NULL_POINTER) if
* <code>ThreadGroupID</code> is null.
*/
- jthreadGroup ReadThreadGroupID(JNIEnv *jni) throw (AgentException);
+ jthreadGroup ReadThreadGroupID(JNIEnv *jni);
/**
* Sequentially reads the <code>StringID</code> value from the JDWP
@@ -495,7 +519,7 @@
* @throws AgentException(JDWP_ERROR_NULL_POINTER)
* if <code>StringID</code> is null.
*/
- jstring ReadStringID(JNIEnv *jni) throw (AgentException);
+ jstring ReadStringID(JNIEnv *jni);
/**
* Sequentially reads the <code>ArrayID</code> value from the JDWP
@@ -521,7 +545,7 @@
* @throws AgentException(JDWP_ERROR_NULL_POINTER) if
* <code>ArrayID</code> is null.
*/
- jarray ReadArrayID(JNIEnv *jni) throw (AgentException);
+ jarray ReadArrayID(JNIEnv *jni);
/**
* Sequentially reads the string value from the JDWP packet's data.
@@ -536,7 +560,7 @@
* @throws OutOfMemoryException if cannot create a global
* reference.
*/
- char* ReadString() throw (InternalErrorException, OutOfMemoryException);
+ char* ReadString();
/**
* Sequentially reads the string value from the JDWP packet's data.
@@ -550,7 +574,7 @@
* @throws OutOfMemoryException if cannot create a global
* reference.
*/
- char* ReadStringNoFree() throw (InternalErrorException, OutOfMemoryException);
+ char* ReadStringNoFree();
/**
* Sequentially reads the <code>JDWP.Tag</code> value and the following
@@ -574,7 +598,7 @@
* @throws AgentException(JDWP_ERROR_NULL_POINTER) if
* <code>ObjectID</code> is null.
*/
- jdwpTaggedValue ReadValue(JNIEnv *jni) throw (AgentException);
+ jdwpTaggedValue ReadValue(JNIEnv *jni);
/**
* Sequentially reads the JDWP value for the selected <code>JDWP.Tag</code>
@@ -599,7 +623,7 @@
* @throws AgentException(JDWP_ERROR_NULL_POINTER) if
* <code>ObjectID</code> is null.
*/
- jvalue ReadUntaggedValue(JNIEnv *jni, jdwpTag tag) throw (AgentException);
+ jvalue ReadUntaggedValue(JNIEnv *jni, jdwpTag tag);
/**
* Disposes all stored global references and allocated strings
@@ -618,17 +642,19 @@
*/
void MoveData(JNIEnv *jni, InputPacketParser* to);
+ void ReleaseData();
+
protected:
- jchar ReadChar() throw (InternalErrorException);
- jshort ReadShort() throw (InternalErrorException);
- jfloat ReadFloat() throw (InternalErrorException);
- jdouble ReadDouble() throw (InternalErrorException);
+ jchar ReadChar();
+ jshort ReadShort();
+ jfloat ReadFloat();
+ jdouble ReadDouble();
private:
int m_position;
- void ReadBigEndianData(void* data, int len) throw (InternalErrorException);
- void ReadRawData(void* data, int len) throw (InternalErrorException);
+ void ReadBigEndianData(void* data, int len);
+ //void ReadRawData(void* data, int len);
};
/**
@@ -650,6 +676,8 @@
*/
size_t GetPosition();
+ void ReleaseData();
+
/**
* Sets current position in reply packet
* to the newPosition, passed as parameter.
@@ -702,7 +730,7 @@
* @param id - the reply ID
* @param errorCode - the JDWP error code
*/
- void CreateJDWPReply(jint id, jdwpError errorCode) throw (InternalErrorException);
+ void CreateJDWPReply(jint id, jdwpError errorCode);
/**
* Fills header fields with the values specific for the new JDWP event.
@@ -713,14 +741,14 @@
*
* @throws InternalErrorException
*/
- void CreateJDWPEvent(jint id, jdwpCommandSet commandSet, jdwpCommand command) throw (InternalErrorException);
+ void CreateJDWPEvent(jint id, jdwpCommandSet commandSet, jdwpCommand command);
/**
* Writes an enclosed packet to transport.
*
* @throws TransportException.
*/
- void WritePacketToTransport() throw (TransportException);
+ int WritePacketToTransport();
/**
* Sets an error code.
@@ -729,7 +757,7 @@
* @param error - the JDWP error code
*/
void SetError(jdwpError error) {
- m_packet.type.reply.errorCode = error;
+ m_packet.type.reply.errorCode = (jshort)error;
}
/**
@@ -739,7 +767,7 @@
*
* @throws OutOfMemoryException.
*/
- void WriteByte(jbyte value) throw (OutOfMemoryException);
+ void WriteByte(jbyte value);
/**
* Sequentially writes the boolean value to the JDWP packet's data.
@@ -748,7 +776,7 @@
*
* @throws OutOfMemoryException.
*/
- void WriteBoolean(jboolean value) throw (OutOfMemoryException);
+ void WriteBoolean(jboolean value);
/**
* Sequentially writes the int value to the JDWP packet's data.
@@ -756,7 +784,7 @@
* @param value - the <code>jint</code> value
* @throws OutOfMemoryException.
*/
- void WriteInt(jint value) throw (OutOfMemoryException);
+ void WriteInt(jint value);
/**
* Sequentially writes the long value to the JDWP packet's data.
@@ -764,7 +792,7 @@
* @param value- the <code>jlong</code> value
* @throws OutOfMemoryException.
*/
- void WriteLong(jlong value) throw (OutOfMemoryException);
+ void WriteLong(jlong value);
/**
* Sequentially writes the <code>jobject</code> value to the
@@ -775,7 +803,7 @@
*
* @throws AgentException.
*/
- void WriteObjectID(JNIEnv *jni, jobject value) throw (AgentException);
+ void WriteObjectID(JNIEnv *jni, jobject value);
/**
* Sequentially writes the <code>jclass</code> value to
@@ -786,7 +814,7 @@
*
* @throws OutOfMemoryException.
*/
- void WriteReferenceTypeID(JNIEnv *jni, jclass value) throw (OutOfMemoryException);
+ void WriteReferenceTypeID(JNIEnv *jni, jclass value);
/**
* Sequentially writes the <code>jfieldID</code> value to
@@ -797,7 +825,7 @@
*
* @throws OutOfMemoryException.
*/
- void WriteFieldID(JNIEnv *jni, jfieldID value) throw (OutOfMemoryException);
+ void WriteFieldID(JNIEnv *jni, jfieldID value);
/**
* Sequentially writes the <code>jmethodID</code> value to the JDWP
@@ -808,7 +836,7 @@
*
* @throws OutOfMemoryException.
*/
- void WriteMethodID(JNIEnv *jni, jmethodID value) throw (OutOfMemoryException);
+ void WriteMethodID(JNIEnv *jni, jmethodID value);
/**
* Sequentially writes the <code>jthread</code> value to the JDWP
@@ -821,7 +849,7 @@
*
* @throws OutOfMemoryException.
*/
- void WriteFrameID(JNIEnv *jni, jthread jvmThread, jint frameDepth, jint framesCount) throw (OutOfMemoryException);
+ void WriteFrameID(JNIEnv *jni, jthread jvmThread, jint frameDepth, jint framesCount);
/**
* Sequentially writes the location value to the JDWP packet's data.
@@ -834,7 +862,7 @@
*
* @throws OutOfMemoryException.
*/
- void WriteLocation(JNIEnv *jni, jdwpTypeTag typeTag, jclass classID, jmethodID methodID, jlocation location) throw (OutOfMemoryException);
+ void WriteLocation(JNIEnv *jni, jdwpTypeTag typeTag, jclass classID, jmethodID methodID, jlocation location);
/**
* Sequentially writes the location value to the JDWP packet's data.
@@ -844,7 +872,7 @@
*
* @throws OutOfMemoryException.
*/
- void WriteLocation(JNIEnv *jni, jdwpLocation *location) throw (OutOfMemoryException);
+ void WriteLocation(JNIEnv *jni, jdwpLocation *location);
/**
* Sequentially writes the <code>jthread</code> value to the JDWP
@@ -855,7 +883,7 @@
*
* @throws OutOfMemoryException.
*/
- void WriteThreadID(JNIEnv *jni, jthread value) throw (OutOfMemoryException);
+ void WriteThreadID(JNIEnv *jni, jthread value);
/**
* Sequentially writes the <code>jthreadGroup</code> value to the JDWP
@@ -866,7 +894,7 @@
*
* @throws OutOfMemoryException.
*/
- void WriteThreadGroupID(JNIEnv *jni, jthreadGroup value) throw (OutOfMemoryException);
+ void WriteThreadGroupID(JNIEnv *jni, jthreadGroup value);
/**
* Sequentially writes the <code>jstring</code> value to the JDWP
@@ -877,7 +905,7 @@
*
* @throws OutOfMemoryException.
*/
- void WriteStringID(JNIEnv *jni, jstring value) throw (OutOfMemoryException);
+ void WriteStringID(JNIEnv *jni, jstring value);
/**
* Sequentially writes the <code>jarray</code> value to the JDWP
@@ -888,7 +916,7 @@
*
* @throws OutOfMemoryException.
*/
- void WriteArrayID(JNIEnv *jni, jarray value) throw (OutOfMemoryException);
+ void WriteArrayID(JNIEnv *jni, jarray value);
/**
* Sequentially writes the string to the JDWP packet's data.
@@ -897,7 +925,7 @@
*
* @throws OutOfMemoryException.
*/
- void WriteString(const char* value) throw (OutOfMemoryException);
+ void WriteString(const char* value);
/**
* Sequentially writes the string to the JDWP packet's data.
@@ -907,7 +935,7 @@
*
* @throws OutOfMemoryException.
*/
- void WriteString(const char* value, jint length) throw (OutOfMemoryException);
+ void WriteString(const char* value, jint length);
/**
* Sequentially writes the tagged-object ID.
@@ -917,7 +945,7 @@
*
* @throws OutOfMemoryException.
*/
- void WriteTaggedObjectID(JNIEnv *jni, jobject object) throw (OutOfMemoryException);
+ void WriteTaggedObjectID(JNIEnv *jni, jobject object);
/**
* Sequentially writes the value object to the JDWP packet's data.
@@ -928,7 +956,7 @@
*
* @throws OutOfMemoryException.
*/
- void WriteValue(JNIEnv *jni, jdwpTag tag, jvalue value) throw (OutOfMemoryException);
+ void WriteValue(JNIEnv *jni, jdwpTag tag, jvalue value);
/**
* Sequentially writes the array of value objects to the JDWP packet's
@@ -941,7 +969,7 @@
*
* @throws OutOfMemoryException.
*/
- void WriteValues(JNIEnv *jni, jdwpTag tag, jint length, jvalue* value) throw (OutOfMemoryException);
+ void WriteValues(JNIEnv *jni, jdwpTag tag, jint length, jvalue* value);
/**
* Sequentially writes the untagged value object to the JDWP
@@ -953,7 +981,7 @@
*
* @throws OutOfMemoryException.
*/
- void WriteUntaggedValue(JNIEnv *jni, jdwpTag tag, jvalue value) throw (OutOfMemoryException);
+ void WriteUntaggedValue(JNIEnv *jni, jdwpTag tag, jvalue value);
/**
* Sequentially writes the array length, then the byte array values
@@ -964,7 +992,7 @@
*
* @throws OutOfMemoryException.
*/
- void WriteByteArray(jbyte* byte, jint length) throw (OutOfMemoryException);
+ void WriteByteArray(jbyte* byte, jint length);
/**
* Disposes all stored references and prepares
@@ -986,13 +1014,13 @@
protected:
void SetId(jint id) { m_packet.type.cmd.id = id; }
void SetFlags(jbyte flags) { m_packet.type.cmd.flags = flags; }
- void SetCommandSet(jdwpCommandSet cmdSet) { m_packet.type.cmd.cmdSet = cmdSet; }
- void SetCommand(jdwpCommand command) { m_packet.type.cmd.cmd = command; }
+ void SetCommandSet(jdwpCommandSet cmdSet) { m_packet.type.cmd.cmdSet = (jbyte)cmdSet; }
+ void SetCommand(jdwpCommand command) { m_packet.type.cmd.cmd = (jbyte)command; }
- void WriteChar(jchar value) throw (OutOfMemoryException);
- void WriteShort(jshort value) throw (OutOfMemoryException);
- void WriteFloat(jfloat value) throw (OutOfMemoryException);
- void WriteDouble(jdouble value) throw (OutOfMemoryException);
+ void WriteChar(jchar value);
+ void WriteShort(jshort value);
+ void WriteFloat(jfloat value);
+ void WriteDouble(jdouble value);
private:
size_t m_position;
@@ -1002,10 +1030,10 @@
int m_registeredObjectIDCount;
int m_registeredObjectIDTableSise; // in ObjectID
- void AllocateMemoryForData(int length) throw (OutOfMemoryException);
- void WriteData(const void* data, int length) throw (OutOfMemoryException);
- void WriteRawData(const void* data, int length) throw (OutOfMemoryException);
- void WriteBigEndianData(void* data, int length) throw (OutOfMemoryException);
+ void AllocateMemoryForData(int length);
+ void WriteData(const void* data, int length);
+ void WriteRawData(const void* data, int length);
+ void WriteBigEndianData(void* data, int length);
/**
* Registers given <code>objectID</code> in a special table containing
@@ -1024,7 +1052,7 @@
* <code>AgentException(JDWP_ERROR_INTERNAL)</code> - if an
* unexpected internal JDWP agent error has occurred.
*/
- void RegisterObjectID(ObjectID objectID) throw (AgentException);
+ void RegisterObjectID(ObjectID objectID);
/**
* Increases by one the count of references for all <code>ObjectID</code> values
@@ -1053,7 +1081,7 @@
*
* @exception TransportException.
*/
- void ReadCommand() throw (TransportException);
+ int ReadCommand();
/**
* Writes the reply packet to the transport and resets the
@@ -1063,7 +1091,7 @@
*
* @exception TransportException
*/
- void WriteReply(JNIEnv *jni) throw (TransportException);
+ int WriteReply(JNIEnv *jni);
/**
* Moves all data to another CommandParser instance.
@@ -1083,13 +1111,15 @@
*/
OutputPacketComposer reply;
- private:
-
/**
* Resets the given CommandParser object.
*/
void Reset(JNIEnv *jni);
+ ~CommandParser();
+
+ private:
+
};
/**
@@ -1111,6 +1141,8 @@
EventComposer(jint id, jdwpCommandSet commandSet, jdwpCommand command,
jdwpSuspendPolicy sp);
+ ~EventComposer();
+
/**
* Writes a thread ID to the output packet and creates a global reference
* to the thread.
@@ -1120,8 +1152,7 @@
*
* @exception OutOfMemoryException.
*/
- void WriteThread(JNIEnv *jni, jthread thread)
- throw (OutOfMemoryException);
+ void WriteThread(JNIEnv *jni, jthread thread);
/**
* Disposes all stored references and prepares CommandParser
@@ -1131,7 +1162,7 @@
*
* @exception TransportException.
*/
- void WriteEvent(JNIEnv *jni) throw (TransportException);
+ int WriteEvent(JNIEnv *jni);
/**
* Resets the current JDWP event.