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: [patch] failed to attach to the same process after detaching in gdbserver multiprocess mode


Thanks Joel, for your comments.

This problem is that Linux_wait_for_event_1 does not return in
linux_wait code path. So gdbserver stucks at linux-low.c::my_waitpid,
and does not return OK/response to gdb. Source code level: old gdb
resets lwp->stop_expected to 0 in linux-low.c::linux_attach if
!non_stop, but 'pedro@codesourcery.com' removes these lines in version
1.134 of linux-low.c. Instead, he replaced it with
'thread_last_resume_kind = resume_stop', which is supposed to work.
But as cross the different debug sessions on the same process (detach,
q; and attach again in multiple process debug mode), cont_thread is
saved and does not get reset at detaching. gdb server will use this
stale 'cont_thread' to make a decision: resume the stopped process in
the 2nd debug session. Thus, gdbserver does not get any chance of
returning the call from linux_wait, while gdb waits for its response,
until gdb tries 3 times of reading response.

The fix is to reset the cont_thread so that gdbserver won't use stale
states in multiple process mode.

Hope above explanation is clear. Adding ChangeLog and fixing the
format issue in comments.  Feel free to make further adjustment on the
comments or the log if necessary.

Thanks
Liang


2011-06-27  Liang Cheng  <liang.cheng555@gmail.com>

	* linux-low.c (linux_detach): Reset cont_thread.

--- linux-low.c.orig    2011-05-04 15:20:12.000000000 -0500
+++ linux-low.c 2011-06-27 11:45:36.223194361 -0500
@@ -837,6 +837,9 @@
   /* Since we presently can only stop all lwps of all processes, we
      need to unstop lwps of other processes.  */
   unstop_all_lwps (0, NULL);
+
+  /* Reset cont_thread.  */
+  cont_thread = null_ptid;
   return 0;
 }


On Mon, Jun 27, 2011 at 10:54 AM, Joel Brobecker <brobecker@adacore.com> wrote:
> Liang,
>
> Thanks for sending these patches in. ?I can't really approve your
> patches since I don't have expertise in that area, but I can comment
> on a couple of things:
> ?- It's great that you take the time to explain what the problem is;
> ?- Patches should have a ChangeLog entry to accompany them;
> ?- One nit: It's awesome that you take the time to add comments
> ? ?to document the code, and we don't use them often enough IMO.
> ? ?But I think that, in general, we want the comments in the code
> ? ?to say *why* you do what you do. ?And oh, comments should start
> ? ?with a capital letter, and end with a period (and we always put
> ? ?2 spaces after period, even before a closing */
>
>> +
>> + ?/* reset cont_thread */
>> + ?cont_thread = null_ptid;
>> ? ?return 0;
>
> --
> Joel
>


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