This is the mail archive of the
gdb@sourceware.cygnus.com
mailing list for the GDB project.
Re: non-blocking reads/writes and event loops
- To: Todd Whitesel <toddpw at windriver dot com>
- Subject: Re: non-blocking reads/writes and event loops
- From: Andrew Cagney <ac131313 at cygnus dot com>
- Date: Mon, 19 Jun 2000 15:20:13 +1000
- CC: Jim Ingham <jingham at apple dot com>, gdb at sourceware dot cygnus dot com, "Insight (GDB GUI)" <insight at sourceware dot cygnus dot com>
- Organization: Cygnus Solutions
- References: <200006150149.SAA00358@alabama.wrs.com>
Todd Whitesel wrote:
>
> > > Agreed. If the API designers are dumb enough to trust threads absolutely,
> > > and don't give us an option, then well, that's life.
> >
> > For what it is worth, here is the ``It is hard'' reason number two:
> ...
> > Just making certain that your eyes are open :-)
>
> No doubts about that. That's why I said "long term goal"...
Unfortunatly, unless feasible intermediate steps are identifed that show
how we can get from the eixsting GDB to this ``long term goal'' it will
just remain a long term goal :-(
To that end, I can see several strategies. Interestingly at least one
discards the assumption that the event loop should _not_ be re-entrant.
o invert the targets first
This would be implemented
using something like:
(gdb) ->do-command
-> target_xfer_memory()
-> target->request_data()
while need more data, run inner event loop
<- target-supply-data()
<- return data
That is, the GDB core would continue
to assume that things are blocking
but the targets would internally
be implemented as non-blocking.
Care would be needed that the internal
event loop didn't re-call the CLI et.al.
o invert the expression evaluator first
In this case, legacy targets would
be wrapped so that:
(gdb) ->do-command
-> target_memory_request()
-> target_xfer_memory ()
schedule event to supply
returned data to expression evaluator
-> supply_data to expression evaluator
(wonder if this makes any sense). Of course there is option three, both
of the above.
For what its worth, for some reason I have preference for the first
option - not sure why, perhaphs it is simply that I'm more familar with
targets and back-ends.
As I noted above, one of the original design decisions for the event
loop that it not be re-entrant. The above questions that decision.
Another decision was that GDB's core assume no threads. Should that too
be questioned?
enjoy,
Andrew