Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Kevin Pouget <kevin.pouget@gmail.com>
To: Pedro Alves <pedro@codesourcery.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH] GDB checkpoint can't/shouldn't be possible with multiple threads on Linux
Date: Tue, 12 Apr 2011 11:55:00 -0000	[thread overview]
Message-ID: <BANLkTi=4HfcbLhbwEAFVHYDwZHxNVAk6aw@mail.gmail.com> (raw)
In-Reply-To: <201104121159.06026.pedro@codesourcery.com>

[-- Attachment #1: Type: text/plain, Size: 1403 bytes --]

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

2011-04-12 Kevin Pouget <kevin.pouget@st.com>

	PR threads/12628

	* linux-fork.c (checkpoint_command): Disallow checkpointing of
	processes with multiple threads.
	(inf_has_multiple_thread_cb): New function.

> > 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.

fixed

> > +  update_thread_list () ;
> > +  if (thread_count () > 1)
> > +    error (_("checkpoint: can't checkpoint multiple threads.")) ;
>
> You have spurious spaces before `;'.

fixed

> 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.)

you're right, I updated the patch as suggested

thanks,

Kevin

[-- Attachment #2: checkpoint.diff --]
[-- Type: application/octet-stream, Size: 1304 bytes --]

diff --git a/gdb/linux-fork.c b/gdb/linux-fork.c
index 7f654af..8a18d42 100644
--- a/gdb/linux-fork.c
+++ b/gdb/linux-fork.c
@@ -616,6 +616,20 @@ linux_fork_checkpointing_p (int pid)
   return (checkpointing_pid == pid);
 }
 
+static int
+inf_has_multiple_thread_cb (struct thread_info *tp, void *data)
+{
+  int *has_multiple_threads = (int *) data;
+  
+  gdb_assert(current_inferior() != NULL);
+  
+  if (current_inferior()->pid == GET_PID(tp->ptid))
+    (*has_multiple_threads)++;
+  
+  /* Stop the iteration if multiple threads have been detected.  */
+  return *has_multiple_threads > 1;
+}
+
 static void
 checkpoint_command (char *args, int from_tty)
 {
@@ -627,7 +641,16 @@ checkpoint_command (char *args, int from_tty)
   struct fork_info *fp;
   pid_t retpid;
   struct cleanup *old_chain;
+  int has_multiple_threads = 0 ;
+
+  if (!target_has_execution) error (_("The program is not being run."));
 
+  /* Ensure that the inferior is not multithreaded.  */
+  update_thread_list () ;
+  iterate_over_threads(inf_has_multiple_thread_cb, &has_multiple_threads);
+  if (has_multiple_threads > 1)
+    error (_("checkpoint: can't checkpoint multiple threads."));
+  
   /* Make the inferior fork, record its (and gdb's) state.  */
 
   if (lookup_minimal_symbol ("fork", NULL, NULL) != NULL)

  reply	other threads:[~2011-04-12 11:55 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-12  7:44 Kevin Pouget
2011-04-12 10:59 ` Pedro Alves
2011-04-12 11:55   ` Kevin Pouget [this message]
2011-04-12 12:55     ` Pedro Alves
2011-04-12 13:28       ` Kevin Pouget
2011-04-12 13:36         ` Pedro Alves
2011-04-12 13:42         ` Pedro Alves
2011-04-12 13:55           ` Kevin Pouget
2011-08-31 12:45             ` Kevin Pouget
2011-09-06 14:42               ` Pedro Alves
2011-09-15 13:32                 ` Kevin Pouget

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='BANLkTi=4HfcbLhbwEAFVHYDwZHxNVAk6aw@mail.gmail.com' \
    --to=kevin.pouget@gmail.com \
    --cc=gdb-patches@sourceware.org \
    --cc=pedro@codesourcery.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox