aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2013-01-14 18:06:21 +0000
committerPedro Alves <palves@redhat.com>2013-01-14 18:06:21 +0000
commit44d594fd828c1ba491e387ad0b06d68f5fd1b342 (patch)
tree3c7215ad010088a6000898c296828cea2d14fa7d /gdb
parent0d705e9f94332dec93970e80afec6c667c79f555 (diff)
downloadgdb-44d594fd828c1ba491e387ad0b06d68f5fd1b342.zip
gdb-44d594fd828c1ba491e387ad0b06d68f5fd1b342.tar.gz
gdb-44d594fd828c1ba491e387ad0b06d68f5fd1b342.tar.bz2
2013-01-14 Richard Sharman <richard_sharman@mitel.com>
Pedro Alves <palves@redhat.com> PR remote/14786 * remote.c (remote_threads_info): Make a copy of the reply from qfThreadInfo and use that instead of rs->buf.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog8
-rw-r--r--gdb/remote.c13
2 files changed, 20 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 2dbbc6a..963b679 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,11 @@
+2013-01-14 Richard Sharman <richard_sharman@mitel.com>
+ Pedro Alves <palves@redhat.com>
+
+ PR remote/14786
+
+ * remote.c (remote_threads_info): Make a copy of the reply from
+ qfThreadInfo and use that instead of rs->buf.
+
2013-01-14 Yao Qi <yao@codesourcery.com>
* dbxread.c (dbx_psymtab_to_symtab_1): Don't check PST is NULL.
diff --git a/gdb/remote.c b/gdb/remote.c
index 59b2eb6..7ea9597 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -2759,6 +2759,15 @@ remote_threads_info (struct target_ops *ops)
bufp = rs->buf;
if (bufp[0] != '\0') /* q packet recognized */
{
+ struct cleanup *old_chain;
+ char *saved_reply;
+
+ /* remote_notice_new_inferior (in the loop below) may make
+ new RSP calls, which clobber rs->buf. Work with a
+ copy. */
+ bufp = saved_reply = xstrdup (rs->buf);
+ old_chain = make_cleanup (free_current_contents, &saved_reply);
+
while (*bufp++ == 'm') /* reply contains one or more TID */
{
do
@@ -2776,10 +2785,12 @@ remote_threads_info (struct target_ops *ops)
}
}
while (*bufp++ == ','); /* comma-separated list */
+ free_current_contents (&saved_reply);
putpkt ("qsThreadInfo");
getpkt (&rs->buf, &rs->buf_size, 0);
- bufp = rs->buf;
+ bufp = saved_reply = xstrdup (rs->buf);
}
+ do_cleanups (old_chain);
return; /* done */
}
}