score: Fix _Thread_queue_Path_release()

It is possible that the owner of the terminal link of a thread queue
path waits on a thread queue.  However, this thread queue has no owner,
e.g. a thread queue of a message queue.
This commit is contained in:
Sebastian Huber
2016-08-04 10:16:14 +02:00
parent 6117f29cd4
commit ca783bbe4c

View File

@@ -177,10 +177,14 @@ static void _Thread_queue_Path_release( Thread_queue_Path *path )
if ( head != node ) {
Thread_queue_Link *link;
/* The terminal link has an owner which does not wait on a thread queue */
link = THREAD_QUEUE_LINK_OF_PATH_NODE( node );
_Assert( link->Queue_context.Wait.queue == NULL );
/*
* The terminal link may have an owner which does not wait on a thread
* queue.
*/
link = THREAD_QUEUE_LINK_OF_PATH_NODE( node );
if ( link->Queue_context.Wait.queue == NULL ) {
_Thread_Wait_release_default_critical(
link->owner,
&link->Queue_context.Lock_context
@@ -190,6 +194,7 @@ static void _Thread_queue_Path_release( Thread_queue_Path *path )
#if defined(RTEMS_DEBUG)
_Chain_Set_off_chain( &link->Path_node );
#endif
}
while ( head != node ) {
/* The other links have an owner which waits on a thread queue */