Skip to content

Commit

Permalink
8193258: Better usage of JDWP HEADER SIZE
Browse files Browse the repository at this point in the history
Reviewed-by: sspitsyn, cjplummer
  • Loading branch information
clanger committed Dec 12, 2017
1 parent 22fece0 commit a3f8eff
Show file tree
Hide file tree
Showing 8 changed files with 27 additions and 32 deletions.
8 changes: 4 additions & 4 deletions src/jdk.jdi/share/native/libdt_shmem/SharedMemoryConnection.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -111,7 +111,7 @@ packetToByteArray(JNIEnv *env, jdwpPacket *str)
jint tmpInt;

total_length = str->type.cmd.len;
data_length = total_length - 11;
data_length = total_length - JDWP_HEADER_SIZE;

/* total packet length is header + data */
array = (*env)->NewByteArray(env, total_length);
Expand Down Expand Up @@ -142,7 +142,7 @@ packetToByteArray(JNIEnv *env, jdwpPacket *str)
/* finally the data */

if (data_length > 0) {
(*env)->SetByteArrayRegion(env, array, 11,
(*env)->SetByteArrayRegion(env, array, JDWP_HEADER_SIZE,
data_length, str->type.cmd.data);
if ((*env)->ExceptionOccurred(env)) {
return NULL;
Expand All @@ -168,7 +168,7 @@ byteArrayToPacket(JNIEnv *env, jbyteArray b, jdwpPacket *str)
{
jsize total_length, data_length;
jbyte *data;
unsigned char pktHeader[11]; /* sizeof length + id + flags + cmdSet + cmd */
unsigned char pktHeader[JDWP_HEADER_SIZE];

/*
* Get the packet header
Expand Down
4 changes: 2 additions & 2 deletions src/jdk.jdi/share/native/libdt_shmem/shmemBack.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -270,7 +270,7 @@ shmemWritePacket(jdwpTransportEnv* env, const jdwpPacket *packet)
if (packet == NULL) {
RETURN_ERROR(JDWPTRANSPORT_ERROR_ILLEGAL_ARGUMENT, "packet is null");
}
if (packet->type.cmd.len < 11) {
if (packet->type.cmd.len < JDWP_HEADER_SIZE) {
RETURN_ERROR(JDWPTRANSPORT_ERROR_ILLEGAL_ARGUMENT, "invalid length");
}
if (connection == NULL) {
Expand Down
6 changes: 3 additions & 3 deletions src/jdk.jdi/share/native/libdt_shmem/shmemBase.c
Original file line number Diff line number Diff line change
Expand Up @@ -1049,7 +1049,7 @@ shmemBase_sendPacket(SharedMemoryConnection *connection, const jdwpPacket *packe
CHECK_ERROR(sendBytes(connection, &packet->type.cmd.cmd, sizeof(jbyte)));
}

data_length = packet->type.cmd.len - 11;
data_length = packet->type.cmd.len - JDWP_HEADER_SIZE;
SHMEM_GUARANTEE(data_length >= 0);
CHECK_ERROR(sendBytes(connection, &data_length, sizeof(jint)));

Expand Down Expand Up @@ -1125,10 +1125,10 @@ shmemBase_receivePacket(SharedMemoryConnection *connection, jdwpPacket *packet)
if (data_length < 0) {
return SYS_ERR;
} else if (data_length == 0) {
packet->type.cmd.len = 11;
packet->type.cmd.len = JDWP_HEADER_SIZE;
packet->type.cmd.data = NULL;
} else {
packet->type.cmd.len = data_length + 11;
packet->type.cmd.len = data_length + JDWP_HEADER_SIZE;
packet->type.cmd.data = (*callback->alloc)(data_length);
if (packet->type.cmd.data == NULL) {
return SYS_ERR;
Expand Down
2 changes: 2 additions & 0 deletions src/jdk.jdwp.agent/share/native/include/jdwpTransport.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,8 @@ typedef struct {
* See: http://java.sun.com/j2se/1.5/docs/guide/jpda/jdwp-spec.html
*/

#define JDWP_HEADER_SIZE 11

enum {
/*
* If additional flags are added that apply to jdwpCmdPacket,
Expand Down
17 changes: 8 additions & 9 deletions src/jdk.jdwp.agent/share/native/libdt_socket/socketTransport.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,6 @@ static jdwpTransportEnv single_env = (jdwpTransportEnv)&interface;
RETURN_IO_ERROR("recv error"); \
}

#define HEADER_SIZE 11
#define MAX_DATA_SIZE 1000

static jint recv_fully(int, char *, int);
Expand Down Expand Up @@ -790,7 +789,7 @@ socketTransport_writePacket(jdwpTransportEnv* env, const jdwpPacket *packet)
/*
* room for header and up to MAX_DATA_SIZE data bytes
*/
char header[HEADER_SIZE + MAX_DATA_SIZE];
char header[JDWP_HEADER_SIZE + MAX_DATA_SIZE];
jbyte *data;

/* packet can't be null */
Expand All @@ -799,7 +798,7 @@ socketTransport_writePacket(jdwpTransportEnv* env, const jdwpPacket *packet)
}

len = packet->type.cmd.len; /* includes header */
data_len = len - HEADER_SIZE;
data_len = len - JDWP_HEADER_SIZE;

/* bad packet */
if (data_len < 0) {
Expand All @@ -825,15 +824,15 @@ socketTransport_writePacket(jdwpTransportEnv* env, const jdwpPacket *packet)
data = packet->type.cmd.data;
/* Do one send for short packets, two for longer ones */
if (data_len <= MAX_DATA_SIZE) {
memcpy(header + HEADER_SIZE, data, data_len);
if (send_fully(socketFD, (char *)&header, HEADER_SIZE + data_len) !=
HEADER_SIZE + data_len) {
memcpy(header + JDWP_HEADER_SIZE, data, data_len);
if (send_fully(socketFD, (char *)&header, JDWP_HEADER_SIZE + data_len) !=
JDWP_HEADER_SIZE + data_len) {
RETURN_IO_ERROR("send failed");
}
} else {
memcpy(header + HEADER_SIZE, data, MAX_DATA_SIZE);
if (send_fully(socketFD, (char *)&header, HEADER_SIZE + MAX_DATA_SIZE) !=
HEADER_SIZE + MAX_DATA_SIZE) {
memcpy(header + JDWP_HEADER_SIZE, data, MAX_DATA_SIZE);
if (send_fully(socketFD, (char *)&header, JDWP_HEADER_SIZE + MAX_DATA_SIZE) !=
JDWP_HEADER_SIZE + MAX_DATA_SIZE) {
RETURN_IO_ERROR("send failed");
}
/* Send the remaining data bytes right out of the data area. */
Expand Down
13 changes: 4 additions & 9 deletions src/jdk.jdwp.agent/share/native/libjdwp/inStream.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -43,7 +43,7 @@ inStream_init(PacketInputStream *stream, jdwpPacket packet)
{
stream->packet = packet;
stream->error = JDWP_ERROR(NONE);
stream->left = packet.type.cmd.len;
stream->left = packet.type.cmd.len - JDWP_HEADER_SIZE;
stream->current = packet.type.cmd.data;
stream->refs = bagCreateBag(sizeof(jobject), INITIAL_REF_ALLOC);
if (stream->refs == NULL) {
Expand Down Expand Up @@ -411,20 +411,15 @@ inStream_readString(PacketInputStream *stream)
return string;
}

jboolean
inStream_endOfInput(PacketInputStream *stream)
{
return (stream->left > 0);
}

jdwpError
inStream_error(PacketInputStream *stream)
{
return stream->error;
}

void
inStream_clearError(PacketInputStream *stream) {
inStream_clearError(PacketInputStream *stream)
{
stream->error = JDWP_ERROR(NONE);
}

Expand Down
3 changes: 1 addition & 2 deletions src/jdk.jdwp.agent/share/native/libjdwp/inStream.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -74,7 +74,6 @@ jvalue inStream_readValue(struct PacketInputStream *in, jbyte *typeKeyPtr);

jdwpError inStream_skipBytes(PacketInputStream *stream, jint count);

jboolean inStream_endOfInput(PacketInputStream *stream);
jdwpError inStream_error(PacketInputStream *stream);
void inStream_clearError(PacketInputStream *stream);
void inStream_destroy(PacketInputStream *stream);
Expand Down
6 changes: 3 additions & 3 deletions src/jdk.jdwp.agent/share/native/libjdwp/outStream.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -418,7 +418,7 @@ outStream_send(PacketOutputStream *stream) {
* packet.
*/
if (stream->firstSegment.next == NULL) {
stream->packet.type.cmd.len = 11 + stream->firstSegment.length;
stream->packet.type.cmd.len = JDWP_HEADER_SIZE + stream->firstSegment.length;
stream->packet.type.cmd.data = stream->firstSegment.data;
rc = transport_sendPacket(&stream->packet);
return rc;
Expand Down Expand Up @@ -447,7 +447,7 @@ outStream_send(PacketOutputStream *stream) {
segment = segment->next;
}

stream->packet.type.cmd.len = 11 + len;
stream->packet.type.cmd.len = JDWP_HEADER_SIZE + len;
stream->packet.type.cmd.data = data;
rc = transport_sendPacket(&stream->packet);
stream->packet.type.cmd.data = NULL;
Expand Down

0 comments on commit a3f8eff

Please sign in to comment.