Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Simon Marchi <simark@simark.ca>
To: Kamil Rytarowski <n54@gmx.com>, gdb-patches@sourceware.org
Cc: tom@tromey.com
Subject: Re: [PATCH v2 05/10] Add gdb/nat common functions for listing threads
Date: Mon, 7 Sep 2020 14:59:45 -0400	[thread overview]
Message-ID: <bcec5cfb-8c32-8bed-195b-2105d78916cf@simark.ca> (raw)
In-Reply-To: <20200904002905.13616-6-n54@gmx.com>

On 2020-09-03 8:29 p.m., Kamil Rytarowski wrote:
> @@ -39,4 +45,121 @@ pid_to_exec_file (pid_t pid)
>    return buf;
>  }
> 
> +/* Generic thread (LWP) lister within a specified process.  The callback
> +   parameters is a C++ function that is called for each detected thread.  */

The behavior seems to be that if the callback returns true, the iteration is
stopped.  If so, it would be good to document it.  As well as the return value
of this function.

> +
> +static bool
> +netbsd_thread_lister (const pid_t pid,
> +		      gdb::function_view<bool (const struct kinfo_lwp *)>
> +		      callback)
> +{
> +  int mib[5] = {CTL_KERN, KERN_LWP, pid, sizeof (struct kinfo_lwp), 0};
> +  size_t size;
> +
> +  if (sysctl (mib, ARRAY_SIZE (mib), NULL, &size, NULL, 0) == -1 || size == 0)
> +    perror_with_name (("sysctl"));
> +
> +  mib[4] = size / sizeof (size_t);
> +
> +  gdb::unique_xmalloc_ptr<struct kinfo_lwp[]> kl
> +    ((struct kinfo_lwp *) xcalloc (size, 1));
> +
> +  if (sysctl (mib, ARRAY_SIZE (mib), kl.get (), &size, NULL, 0) == -1
> +      || size == 0)
> +    perror_with_name (("sysctl"));

Is there a chance that the number of threads changes between the two sysctl
calls?  Or does that assume that the process is not executing?  It would be
good to spell out any such assumption in a comment.

> +
> +  for (size_t i = 0; i < size / sizeof (struct kinfo_lwp); i++)
> +    {
> +      struct kinfo_lwp *l = &kl[i];
> +
> +      /* Return true if the specified thread is alive.  */
> +      auto lwp_alive
> +	= [] (struct kinfo_lwp *lwp)
> +	  {
> +	    switch (lwp->l_stat)
> +	      {
> +	      case LSSLEEP:
> +	      case LSRUN:
> +	      case LSONPROC:
> +	      case LSSTOP:
> +	      case LSSUSPENDED:
> +		return true;
> +	      default:
> +		return false;
> +	      }
> +	  };
> +
> +      /* Ignore embryonic or demised threads.  */
> +      if (!lwp_alive (l))
> +	continue;
> +
> +      if (callback (l))
> +	return true;
> +    }
> +
> +  return false;
> +}
> +
> +/* Return true if PTID is still active in the inferior.  */
> +
> +bool
> +thread_alive (ptid_t ptid)
> +{
> +  pid_t pid = ptid.pid ();
> +  lwpid_t lwp = ptid.lwp ();
> +
> +  auto fn
> +    = [&lwp] (const struct kinfo_lwp *kl)
> +      {
> +        return kl->l_lid == lwp;
> +      };

Just a nit, but would it be better to capture variables known to be
scalars as value instead of as reference?

Simon


  reply	other threads:[~2020-09-07 18:59 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-04  0:28 [PATCH v2 00/10] Add minimal NetBSD/amd64 gdbserver support Kamil Rytarowski
2020-09-04  0:28 ` [PATCH v2 01/10] Add handle_eintr to wrap EINTR handling in syscalls Kamil Rytarowski
2020-09-07 14:06   ` Simon Marchi
2020-09-07 14:59     ` Kamil Rytarowski
2020-10-12 17:56       ` [PATCH] gdb::handle_eintr, remove need to specify return type (Re: [PATCH v2 01/10] Add handle_eintr to wrap EINTR handling in syscalls) Pedro Alves
2020-10-13 13:43         ` Kamil Rytarowski
2020-10-13 14:17           ` [PATCH v2] gdb::handle_eintr, remove need to specify return type Pedro Alves
2020-10-13 14:54             ` Kamil Rytarowski
2020-10-16 20:51             ` Tom Tromey
2020-10-26 14:00               ` Pedro Alves
2020-10-26 14:20                 ` Tom Tromey
2020-10-26 18:59                   ` Pedro Alves
2020-09-04  0:28 ` [PATCH v2 02/10] Register a placeholder for NetBSD shared functions in gdb/nat Kamil Rytarowski
2020-09-07 18:44   ` Simon Marchi
2020-09-07 19:49     ` Kamil Rytarowski
2020-09-04  0:28 ` [PATCH v2 03/10] Build nat/netbsd-nat.o for the NetBSD native target Kamil Rytarowski
2020-09-04  0:28 ` [PATCH v2 04/10] Add netbsd_nat::pid_to_exec_file Kamil Rytarowski
2020-09-07  7:57   ` Andrew Burgess
2020-09-07 13:36     ` Kamil Rytarowski
2020-09-07 18:48       ` Simon Marchi
2020-09-07 18:47   ` Simon Marchi
2020-09-07 19:51     ` Kamil Rytarowski
2020-09-04  0:29 ` [PATCH v2 05/10] Add gdb/nat common functions for listing threads Kamil Rytarowski
2020-09-07 18:59   ` Simon Marchi [this message]
2020-09-07 19:57     ` Kamil Rytarowski
2020-09-04  0:29 ` [PATCH v2 06/10] Add netbsd_nat::enable_proc_events in gdb/nat Kamil Rytarowski
2020-09-04  0:29 ` [PATCH v2 07/10] Add a common utility function to read and write siginfo_t in inferior Kamil Rytarowski
2020-09-04  0:29 ` [PATCH v2 08/10] Avoid double free in startup_inferior Kamil Rytarowski
2020-09-07 19:19   ` Simon Marchi
2020-09-08  0:54     ` Kamil Rytarowski
2020-09-08  2:21       ` Simon Marchi
2020-09-04  0:29 ` [PATCH v2 09/10] Switch local native code to gdb/nat shared functions Kamil Rytarowski
2020-09-07 19:24   ` Simon Marchi
2020-09-08  0:04     ` Kamil Rytarowski
2020-09-04  0:29 ` [PATCH v2 10/10] Add minimal and functional NetBSD/amd64 gdbserver Kamil Rytarowski
2020-09-07 19:58   ` Simon Marchi
2020-09-08  0:03     ` Kamil Rytarowski

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=bcec5cfb-8c32-8bed-195b-2105d78916cf@simark.ca \
    --to=simark@simark.ca \
    --cc=gdb-patches@sourceware.org \
    --cc=n54@gmx.com \
    --cc=tom@tromey.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