I get it from the following: Breakpoint 4, _User_extensions_Thread_terminate_visitor (executing=0x2038d78, arg=0x2038d78, callouts=0x202d76c <Configuration_Initial_Extensions>) at ../../../../../../rtems/c/src/../../cpukit/score/src/userextiterate.c:132 132 { (gdb) bt #0 _User_extensions_Thread_terminate_visitor (executing=0x2038d78, arg=0x2038d78, callouts=0x202d76c <Configuration_Initial_Extensions>) at ../../../../../../rtems/c/src/../../cpukit/score/src/userextiterate.c:132 #1 0x02012ec4 in _User_extensions_Iterate (arg=arg@entry=0x2038d78, visitor=0x2012e5c <_User_extensions_Thread_terminate_visitor>) at ../../../../../../rtems/c/src/../../cpukit/score/src/userextiterate.c:155 #2 0x020128d8 in _User_extensions_Thread_terminate (executing=0x2038d78) at ../../cpukit/../../../sis/lib/include/rtems/score/userextimpl.h:252 #3 _Thread_Life_action_handler (executing=0x2038d78, action=0x2038ed8, cpu=0x2035500 <_Per_CPU_Information>, level=<optimized out>) at ../../../../../../rtems/c/src/../../cpukit/score/src/threadrestart.c:171 #4 0x02011a18 in _Thread_Run_post_switch_actions (executing=0x2038d78) at ../../../../../../rtems/c/src/../../cpukit/score/src/threaddispatch.c:54 #5 _Thread_Dispatch () at ../../../../../../rtems/c/src/../../cpukit/score/src/threaddispatch.c:222 #6 0x0200e72c in _Thread_Enable_dispatch () at ../../cpukit/../../../sis/lib/include/rtems/score/threaddispatch.h:237 #7 _Objects_Put (the_object=<optimized out>) at ../../cpukit/../../../sis/lib/include/rtems/score/objectimpl.h:969 #8 rtems_task_delete (id=0) at ../../../../../../rtems/c/src/../../cpukit/rtems/src/taskdelete.c:52
-- Jennifer > -----Original Message----- > From: Sebastian Huber [mailto:sebastian.hu...@embedded-brains.de] > Sent: Friday, April 18, 2014 2:11 PM > To: Jennifer Averett > Cc: rtems-devel@rtems.org > Subject: Re: [PATCH 2/4] score: Add validation that no extensions are null. > > On 04/18/2014 08:51 PM, Jennifer Averett wrote: > >> >-----Original Message----- > >> >From: Sebastian Huber [mailto:sebastian.hu...@embedded-brains.de] > >> >Sent: Friday, April 18, 2014 1:49 PM > >> >To: Jennifer Averett > >> >Subject: Re: [PATCH 2/4] score: Add validation that no extensions are > null. > >> > > >> >On 04/18/2014 07:45 PM, Jennifer Averett wrote: > >>> > >I don't have the stack trace, but Joel and I both saw a section > >>> > >that it looked like a NULL could be called from, I see the section of > code you are > >>> > >referring to and that is not where we were at. It was before the zero > >>> > >of memory was added to the capture engine, so we may have > tromped > >>> > >on the code and been somewhere that is not the normal path. > >>> > > > >>> > >I can't reproduce what we were seeing. > >> > > >> >You have seen a call of a random pointer slipped in through the > >> >incomplete initialized extensions table on the stack. > >> > > >>> > > > >>> > >I'll remove the patches for the null extensions, but I think the > >>> > >capture engine patch is still correct, with the exception that > >>> > >the fatal extension can be NULL instead of an empty method. > >> > > >> >Yes, but I would make the extensions table static const. I think > >> >also that we need a proper thread terminate event, since terminate > >> >and delete are now different things. > > I thought about adding a terminate event, but since the terminate is > > being triggered by a delete of self it seemed the delete event would > > be the better option. The application user shouldn't have to > > understand the internals to understand the output from the capture > engine (imo). > > > > Where do you have this "since the terminate is being triggered by a delete of > self" from? Please help to improve the documentation. > > /** > * @brief Task termination extension. > * > * This extension is invoked by _Thread_Life_action_handler() in case a > * termination request is recognized. > * > * It is invoked in the context of the terminated thread right before the > * thread dispatch to the heir thread. The POSIX cleanup and key > destructors > * execute in this context. > * > * Thread dispatching is enabled. The thread is not the holder of the > * allocator mutex. The thread life is protected. Thread restart and delete > * requests issued by terminate extensions lead to recursion. > * > * @param[in] terminated The terminated thread. > */ > typedef void( *User_extensions_thread_terminate_extension )( > Thread_Control *terminated > ); > > /** > * @brief Task delete extension. > * > * It corresponds to _Thread_Close() (used by the rtems_task_delete() > * directive, pthread_exit() and pthread_cancel()). > * > * It is invoked before all resources of the thread are deleted. The > executing > * and deleted arguments are never equal. > * > * Thread dispatching is enabled. The executing thread locked the allocator > * mutex. > * > * @param[in] executing The executing thread. > * @param[in] deleted The deleted thread. > */ > typedef void( *User_extensions_thread_delete_extension )( > Thread_Control *executing, > Thread_Control *deleted > ); > > -- > Sebastian Huber, embedded brains GmbH > > Address : Dornierstr. 4, D-82178 Puchheim, Germany > Phone : +49 89 189 47 41-16 > Fax : +49 89 189 47 41-09 > E-Mail : sebastian.hu...@embedded-brains.de > PGP : Public key available on request. > > Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG. _______________________________________________ rtems-devel mailing list rtems-devel@rtems.org http://www.rtems.org/mailman/listinfo/rtems-devel