Re: [PATCH] GDB checkpoint can't/shouldn't be possible with multiple threads on Linux

Pedro Alves
2011-04-12T10:59:11Z

On Tuesday 12 April 2011 08:44:14, Kevin Pouget wrote:

> as I reported in http://sourceware.org/bugzilla/show_bug.cgi?id=12628
> and discussed in http://sourceware.org/ml/gdb/2011-04/msg00018.html,

> (does such a patch require a test case?)

Tests are always good, tough I'd approve this without one.

> diff --git a/gdb/ChangeLog b/gdb/ChangeLog
> index 880781a..611aa7e 100644
> --- a/gdb/ChangeLog
> +++ b/gdb/ChangeLog
> @@ -1,3 +1,9 @@
> +2011-04-12 Kevin Pouget <kevin.pouget@st.com>
> +
> + PR threads/12628
> + * linux-fork.c (checkpoint_command): Disallow checkpointing of
> + processes with multiple threads.
> +

Next time please post ChangeLog entries as plaintext,
separate from the patch.

> diff --git a/gdb/linux-fork.c b/gdb/linux-fork.c
> index 7f654af..c137604 100644
> --- a/gdb/linux-fork.c
> +++ b/gdb/linux-fork.c
> @@ -628,6 +628,11 @@ checkpoint_command (char *args, int from_tty)
> pid_t retpid;
> struct cleanup *old_chain;
>
> + /* Ensure that the inferior is not multithreaded. */

Double space after periods.

> + update_thread_list () ;
> + if (thread_count () > 1)
> + error (_("checkpoint: can't checkpoint multiple threads.")) ;

You have spurious spaces before `;'.

thread_count() returns the sum total number of threads of all
inferiors/process. You want the number of threads of the
current process only. AFAIR, there's no function handy that
returns you that. (Since you're interested in checking for multiple
threads, you could use iterate_over_threads with a
callback that returns true if it sees a second thread for a
given process, so you don't really need to count all
the threads.)

--
Pedro Alves