On 04/18/2014 08:51 PM, Jennifer Averett wrote:
>-----Original Message-----
>From: Sebastian Huber [mailto:[email protected]]
>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 : [email protected]
PGP : Public key available on request.
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
_______________________________________________
rtems-devel mailing list
[email protected]
http://www.rtems.org/mailman/listinfo/rtems-devel