This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: RFC: remote.c incoming packet cleanups


Eli Zaretskii wrote:
Date: Thu, 23 Feb 2006 09:56:21 -0500
From: Daniel Jacobowitz <drow@false.org>

The basic change is to convert getpkt from (char *buf, int len,
int forever) to (char **buf_p, int *len, int forever) and allocate
*buf_p with xmalloc, so that we can pass it to xrealloc.  All
the rest is cascading changes.


This is fine with me, but you wrote this code in get_memory_packet_size:


@@ -436,6 +455,15 @@ get_memory_packet_size (struct memory_pa
    what_they_get = MAX_REMOTE_PACKET_SIZE;
  if (what_they_get < MIN_REMOTE_PACKET_SIZE)
    what_they_get = MIN_REMOTE_PACKET_SIZE;
+
+  /* Make sure there is room in the global buffer for this packet
+     (including its trailing NUL byte).  */
+  if (rs->buf_size < what_they_get + 1)
+    {
+      rs->buf_size = what_they_get + 1;
+      rs->buf = xrealloc (rs->buf, what_they_get + 1);
+    }
+
  return what_they_get;
}


I wonder whether it would be better to expand by multiplying the
previous size by 2, instead of just making enough room for the current
packet.  The latter could cause bad memory fragmentation under some
pathological patterns of packet size sequences.  (And in read_frame you
indeed multiply by two when you realloc the buffer.)

Second that. Realloc by one doesn't sit right. ;-)



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]