Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Pedro Alves <pedro@codesourcery.com>
To: gdb-patches@sourceware.org
Cc: Michael Snyder <msnyder@vmware.com>
Subject: Re: [commit] fix for "info threads" printing multiple headers
Date: Tue, 22 Feb 2011 09:17:00 -0000	[thread overview]
Message-ID: <201102220851.20252.pedro@codesourcery.com> (raw)
In-Reply-To: <4D62F7D6.8040705@vmware.com>

Thanks!  A few comments below.  If you don't want to
fix these, I'll try to find a bit later on myself.

On Monday 21 February 2011 23:40:06, Michael Snyder wrote:
> +int
> +number_is_in_list (char *list, int number)
> +{
> +  if (list == NULL || *list == '\0')
> +    return 1;
> +
> +  while (list != NULL && *list != '\0')
> +    if (get_number_or_range (&list) == number)
> +      return 1;
> +
> +  return 0;
> +}

- why the 'list != NULL' check in the while loop?
get_number_or_range never puts NULL in the output
argument, and NULL lists are short circuited above.

- get_number_or_range mantains an internal state machine
using static variables.  I think that as long as you
always pass in the same list string, and the list spec
string is correctly formed, you're not hitting stale
state inside get_number_or_range.  It'd be nicer
if get_number_or_range (or a variant which get_number_or_range
would then be implemented on top of) took an additional
struct pointer that pointed to a struct that held
all the currently static state.  This function would then
always pass in a pointer into such a newly initialized
object on the stack.

- get_number_or_range returns '0' on error.  You can
see a bunch of its old callers in breakpoint.c handling
that '0' case specially.  It comes from get_number_trailer:

	  /* Return zero, which caller must interpret as error.  */
	  retval = 0;

I suspect that we'll want to make than an "error" call or
to adjust the interface of these functions to allow
returning an error indication unambiguous with zero
the number, as soon as we want to reuse this function
in places where zero makes sense as valid number...

Examples of not handling the special zero:

(gdb) info threads a 1
  Id   Target Id         Frame 
* 1    Thread 0x7ffff7fd6700 (LWP 13769) "threads" 0x00007ffff7bc7285 in pthread_join () from /lib/libpthread.so.0
(gdb)

(gdb) info threads a-1
No threads match 'a-1'.

(gdb) info threads a -1
  Id   Target Id         Frame 
* 1    Thread 0x7ffff7fd6700 (LWP 13769) "threads" 0x00007ffff7bc7285 in pthread_join () from /lib/libpthread.so.0
(gdb) 

The last one only "works" by accident due to the extra space.

-- 
Pedro Alves


  reply	other threads:[~2011-02-22  8:51 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-22  1:57 Michael Snyder
2011-02-22  9:17 ` Pedro Alves [this message]
2011-02-22 10:04   ` Pedro Alves
2011-02-22 17:45   ` Tom Tromey
2011-02-22 18:37     ` Michael Snyder
2011-02-22 18:49       ` Pedro Alves
2011-02-22 18:31   ` Michael Snyder
2011-02-22 18:41     ` Pedro Alves
2011-02-22 18:55       ` Michael Snyder
2011-02-22 17:37 ` Tom Tromey
2011-02-22 18:36   ` Michael Snyder
2011-02-22 19:00     ` Tom Tromey
2011-02-22 20:05       ` Michael Snyder

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=201102220851.20252.pedro@codesourcery.com \
    --to=pedro@codesourcery.com \
    --cc=gdb-patches@sourceware.org \
    --cc=msnyder@vmware.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