This is the mail archive of the gdb@sources.redhat.com 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: lin-lwp.c:1317: internal-error: lin_lwp_wait: Assertion `iterate_over_lwps(runing_callback, NULL)' failed.


Yes, something was checked in to HEAD last week.  It missed GDB 6.0.

However, I've had the same error reported to me again yesterday.  I'll
be looking into this...

On Tue, Oct 14, 2003 at 05:50:57PM +0530, Srikrishnan Sundararajan wrote:
> Jeff, Were you able to create a patch for this?
> Srikrishnan
> 
> J. Johnston" wrote:
> > 
> > srikrish wrote:
> > > In yesterday's post, I forgot to add that the program runs fine outside gdb.
> > > Here's the output:
> > > mymachine: /home/srik>./myprog somearg
> > > entering main program. pid: 10861
> > > In threadproc pid:10863
> > >
> > >  getting up from sleep
> > > entering main program. pid: 10863
> > > end of main: 10863
> > >
> > > mymachine: /home/srik>
> > >
> > > Is this a limitation of GDB?
> > >
> > 
> > No, it is a bug.  The assert is historical and was left in after the nptl
> > modifications.  It is meant to prevent gdb from being left hanging because there
> > are no running threads to get events from.
> > 
> > With the advent of the new nptl model, gdb has to look for the case
> > of exiting the main thread.  In nptl, when you exit the main thread, it
> > means all other threads should have exited.  This is not the case for
> > linuxthreads.  Since gdb is not notified when nptl lwps exit,
> > it tries stopping the other lwps to see if they have exited, then
> > resumes them if they are still around.
> > 
> > In your case, the last non-main thread remaining got to a breakpoint so it
> > was stopped with pending status and the resume did not mark the thread as running.
> > After gdb got rid of the main thread, it looked to see if any threads existed and if
> > so, were they still running. The non-main thread was found but wasn't marked as running
> > so the assert tripped.
> > 
> > I believe the answer is to adjust the assert to also look for pending events on
> > the existing threads.
> > 
> > I can shortly submit a patch for consideration which you can try out.
> > 
> > -- Jeff J.
> > 
> > >
> > > Subject: lin-lwp.c:1317: internal-error: lin_lwp_wait: Assertion
> > > `iterate_over_lwps (runing_callback, NULL)' failed.
> > >
> > >
> > >
> > >>Hi,
> > >>I am getting an assertion failure/gdb-internal-error while running a
> > >>multi-threaded program using the GDB20030731. Can some one point out if
> > >
> > > this
> > >
> > >>is a known bug or is there a workaround?
> > >>
> > >>Error Message: lin-lwp.c:1317: internal-error: lin_lwp_wait: Assertion
> > >>`iterate_over_lwps (runing_callback, NULL)' failed.
> > >>
> > >>The test program and output follows. I am using 2.4.19-3Suse-SMP kernel.
> > >>(linuxthreads)
> > >>Thanks,
> > >>Srikrishnan
> > >>
> > >>Test Program: Please note that I am calling exec of the same program
> > >
> > > without
> > >
> > >>arguments.
> > >>#include <stdio.h>
> > >>#include <pthread.h>
> > >>void * threadproc(void * junk)
> > >>{
> > >> int i;
> > >> printf("In threadproc pid:%d \n", getpid());
> > >>    printf("\n getting up from sleep \n");
> > >>  execv("myprog",0);=20
> > >>    printf("exec failed \n");
> > >>}
> > >>
> > >>int main(int argc, char * argv)
> > >>{
> > >> int i;
> > >>    void * ret;
> > >> pthread_t newthread;
> > >>    printf("entering main program. pid: %d \n", getpid());
> > >> if(argc >1)
> > >> {
> > >>  pthread_create(&newthread, NULL, threadproc, NULL);
> > >>  printf("back to main. pid:%d \n",getpid());
> > >>  }
> > >>    printf("end of main: %d \n", getpid());
> > >>}
> > >>
> > >>
> > >>OUTOUT WHILE USING GDB after enabling printing of verbose/debug statements
> > >>in gdb/lin-lwp.c
> > >>
> > >>
> > >>>gdbdir/gdb myprog
> > >>
> > >>GNU gdb 20030731
> > >>Copyright 2003 Free Software Foundation, Inc.
> > >>GDB is free software, covered by the GNU General Public License, and you
> > >
> > > are
> > >
> > >>welcome to change it and/or distribute copies of it under certain
> > >>conditions.
> > >>Type "show copying" to see the conditions.
> > >>There is absolutely no warranty for GDB.  Type "show warranty" for
> > >
> > > details.
> > >
> > >>This GDB was configured as "s390-ibm-linux"...
> > >>(gdb) run somearg
> > >>Starting program: /home/fultonm/bug3380/test3380nosleep somearg
> > >>CW:  waitpid 2122 received Trace/breakpoint trap (stopped)
> > >>CW:  waitpid 2122 received Trace/breakpoint trap (stopped)
> > >>CW:  waitpid 2122 received Trace/breakpoint trap (stopped)
> > >>[New Thread 1024 (LWP 2122)]
> > >>LLR: PTRACE_SINGLESTEP process 2122, 0 (resume event thread)
> > >>LLW: waitpid 2122 received Trace/breakpoint trap (stopped)
> > >>LLW: Candidate event Trace/breakpoint trap (stopped) in LWP 2122.
> > >>SEL: Select single-step LWP 2122
> > >>LLW: trap_ptid is process 2122.
> > >>LLR: PTRACE_CONT process 2122, 0 (resume event thread)
> > >>LLW: waitpid 2122 received Trace/breakpoint trap (stopped)
> > >>LLW: Candidate event Trace/breakpoint trap (stopped) in LWP 2122.
> > >>LLW: trap_ptid is process 2122.
> > >>LLR: PTRACE_SINGLESTEP process 2122, 0 (resume event thread)
> > >>LLW: waitpid 2122 received Trace/breakpoint trap (stopped)
> > >>LLW: Candidate event Trace/breakpoint trap (stopped) in LWP 2122.
> > >>SEL: Select single-step LWP 2122
> > >>LLW: trap_ptid is process 2122.
> > >>LLR: PTRACE_CONT process 2122, 0 (resume event thread)
> > >>LLW: waitpid 2122 received Trace/breakpoint trap (stopped)
> > >>LLW: Candidate event Trace/breakpoint trap (stopped) in LWP 2122.
> > >>LLW: trap_ptid is process 2122.
> > >>LLR: PTRACE_SINGLESTEP process 2122, 0 (resume event thread)
> > >>LLW: waitpid 2122 received Trace/breakpoint trap (stopped)
> > >>LLW: Candidate event Trace/breakpoint trap (stopped) in LWP 2122.
> > >>SEL: Select single-step LWP 2122
> > >>LLW: trap_ptid is process 2122.
> > >>LLR: PTRACE_CONT process 2122, 0 (resume event thread)
> > >>LLW: waitpid 2122 received Trace/breakpoint trap (stopped)
> > >>LLW: Candidate event Trace/breakpoint trap (stopped) in LWP 2122.
> > >>LLW: trap_ptid is process 2122.
> > >>[New Thread 2049 (LWP 2123)]
> > >>LLAL: PTRACE_ATTACH LWP 2123, 0, 0 (OK)
> > >>LLAL: waitpid LWP 2123 received Stopped (signal) (stopped)
> > >>LLR: PTRACE_SINGLESTEP process 2122, 0 (resume event thread)
> > >>LLW: waitpid 2122 received Trace/breakpoint trap (stopped)
> > >>LLTA: PTRACE_PEEKUSER LWP 2122, 0, 0 (OK)
> > >>LLW: Candidate event Trace/breakpoint trap (stopped) in LWP 2122.
> > >>SEL: Select single-step LWP 2122
> > >>LLW: trap_ptid is LWP 2122.
> > >>RC:  PTRACE_CONT LWP 2123, 0, 0 (resume sibling)
> > >>LLR: PTRACE_CONT process 2122, 0 (resume event thread)
> > >>LLW: waitpid 2123 received Real-time signal 0 (stopped)
> > >>LLTA: PTRACE_PEEKUSER LWP 2123, 0, 0 (OK)
> > >>LLW: PTRACE_CONT LWP 2123, Unknown signal 77 (preempt 'handle')
> > >>LLW: waitpid 2123 received Trace/breakpoint trap (stopped)
> > >>LLTA: PTRACE_PEEKUSER LWP 2123, 0, 0 (OK)
> > >>LLW: Candidate event Trace/breakpoint trap (stopped) in LWP 2123.
> > >>SC:  kill LWP 2122 **<SIGSTOP>**
> > >>SC:  lwp kill 0 ERRNO-OK
> > >>SWC: waitpid LWP 2122 received Stopped (signal) (stopped)
> > >>SWC: CALLING LLTA
> > >>LLTA: PTRACE_PEEKUSER LWP 2122, 0, 0 (OK)
> > >>LLW: trap_ptid is LWP 2123.
> > >>[New Thread 1026 (LWP 2124)]
> > >>LLAL: PTRACE_ATTACH LWP 2124, 0, 0 (OK)
> > >>LLAL: waitpid LWP 2124 received Stopped (signal) (stopped)
> > >>LLR: PTRACE_SINGLESTEP process 2123, 0 (resume event thread)
> > >>LLW: waitpid 2123 received Trace/breakpoint trap (stopped)
> > >>LLTA: PTRACE_PEEKUSER LWP 2123, 0, 0 (OK)
> > >>LLW: Candidate event Trace/breakpoint trap (stopped) in LWP 2123.
> > >>SEL: Select single-step LWP 2123
> > >>LLW: trap_ptid is LWP 2123.
> > >>RC:  PTRACE_CONT LWP 2124, 0, 0 (resume sibling)
> > >>RC:  PTRACE_CONT LWP 2122, 0, 0 (resume sibling)
> > >>LLR: PTRACE_CONT process 2123, 0 (resume event thread)
> > >>LLW: waitpid 2124 received Real-time signal 0 (stopped)
> > >>LLTA: PTRACE_PEEKUSER LWP 2124, 0, 0 (OK)
> > >>LLW: PTRACE_CONT LWP 2124, Unknown signal 77 (preempt 'handle')
> > >>In threadproc pid:2124
> > >>LLW: waitpid 2122 received Real-time signal 0 (stopped)
> > >> getting up from sleep
> > >>LLTA: PTRACE_PEEKUSER LWP 2122, 0, 0 (OK)
> > >>back to main. pid:2122
> > >>LLW: PTRACE_CONT LWP 2122, Unknown signal 77 (preempt 'handle')
> > >>LLW: waitpid 2122 received Real-time signal 1 (stopped)
> > >>LLTA: PTRACE_PEEKUSER LWP 2122, 0, 0 (OK)
> > >>LLW: PTRACE_CONT LWP 2122, Real-time signal 13 (preempt 'handle')
> > >>LLW: waitpid 2124 received Real-time signal 0 (stopped)
> > >>LLTA: PTRACE_PEEKUSER LWP 2124, 0, 0 (OK)
> > >>LLW: PTRACE_CONT LWP 2124, Unknown signal 77 (preempt 'handle')
> > >>LLW: waitpid 2123 received 0 (exited)
> > >>LLW: LWP 2123 exited.
> > >>LLW: waitpid 2122 received 0 (exited)
> > >>SC:  kill LWP 2124 **<SIGSTOP>**
> > >>SC:  lwp kill 0 ERRNO-OK
> > >>SWC: waitpid LWP 2124 received Trace/breakpoint trap (stopped)
> > >>SWC: CALLING LLTA
> > >>LLTA: PTRACE_PEEKUSER LWP 2124, 0, 0 (OK)
> > >>PTRACE_CONT LWP 2124, 0, 0 (OK)
> > >>SWC: Candidate SIGTRAP event in LWP 2124
> > >>SWC: waitpid LWP 2124 received Stopped (signal) (stopped)
> > >>SWC: CALLING LLTA
> > >>LLTA: PTRACE_PEEKUSER LWP 2124, 0, 0 (OK)
> > >>LLW: LWP 2122 exited.
> > >>lin-lwp.c:1317: internal-error: lin_lwp_wait: Assertion `iterate_over_lwps
> > >>(run
> > >>ing_callback, NULL)' failed.
> > >>A problem internal to GDB has been detected,
> > >>further debugging may prove unreliable.
> > >>Quit this debugging session? (y or n) y
> > >>
> > >>Create a core file of GDB? (y or n) y
> > >>Abort
> > >>mymachine: /home/srik>
> > >>
> > >>
> > >>
> > >
> > >
> 

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer


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