This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA] Make continuations per-thread.


On Friday 02 May 2008 15:34:11 Pedro Alves wrote:
> A Friday 02 May 2008 04:00:12, Daniel Jacobowitz wrote:
> > On Thu, Apr 24, 2008 at 07:45:38PM +0300, Vladimir Prus wrote:
> > > Right now, continuations are global. This means that if we're doing
> > > 'finish' in one thread, then we cannot do 'finish' or anything that
> > > also uses continuations, in any other thread. This seems unnecessary
> > > limitation, and this patch makes continuations per-thread.
> > >
> > > Further into non-stop series, it really allows me to do 'finish' or
> > > 'step' in several threads independently.
> > >
> > > OK?
> >
> > Could you explain why this is safe?  We will do continuations for the
> > thread which reports an event only.  So it seems like continuations
> > for other threads will linger in their struct thread.
> >
> > For example, if we finish from one thread and hit a breakpoint in
> > another thread before the finish returns.
> 
> That's true.  Attached is what we have next on the non-stop
> series to fix that.  I'm not thrilled by it, but there are intermediate
> context switches in handle_inferior_event that make it much uglier to try
> to not make it centralized.  This is one of the things that gets much
> better looking when we switch completelly to always-a-thread, and
> get rid of context-switching.  I'm introducing another variable, instead of
> using previous_inferior_ptid, which would be a good candidate, but I have
> other plans for it.

This is only for intermediate continations. For ordinary continuations, not
running them when we hit a breakpoint in another thread is desirable. Why should
a breakpoint in some other thread abort "finish"? Note that in current gdb,
hitting a breakpoint in unrelated thread does not abort "next" -- say we
did next, inserted step resume breakpoint, and then hit breakpoint in some other
thread. Then, the step resume breakpoint will not be removed. If we decide to
continue the program, we'll eventually hit it. 

I don't see any problem with continuations been kept for a given thread
for a long time. It's not an unbounded amount of continuations -- if we get an
event in this thread, continuation will run, and if we don't get an event,
we won't add any futher continuations.

- Volodya


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]