+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.
 
       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
                    }
                }
              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 */
        }
     }