From 768c5cee1895f81823c6505e5b18d0eee5470fec Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 19 Jul 2013 17:18:15 +0200 Subject: posix: Obtain _Thread_Executing in proper context --- cpukit/posix/src/pthreadjoin.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/cpukit/posix/src/pthreadjoin.c b/cpukit/posix/src/pthreadjoin.c index 0ee700a528..9dc1b240e8 100644 --- a/cpukit/posix/src/pthreadjoin.c +++ b/cpukit/posix/src/pthreadjoin.c @@ -37,6 +37,7 @@ int pthread_join( POSIX_API_Control *api; Objects_Locations location; void *return_pointer; + Thread_Control *executing; on_EINTR: the_thread = _Thread_Get( thread, &location ); @@ -50,7 +51,9 @@ on_EINTR: return EINVAL; } - if ( _Thread_Is_executing( the_thread ) ) { + executing = _Thread_Executing; + + if ( executing == the_thread ) { _Objects_Put( &the_thread->Object ); return EDEADLK; } @@ -67,13 +70,13 @@ on_EINTR: (STATES_WAITING_FOR_JOIN_AT_EXIT | STATES_TRANSIENT) ); } else { - _Thread_Executing->Wait.return_argument = &return_pointer; + executing->Wait.return_argument = &return_pointer; _Thread_queue_Enter_critical_section( &api->Join_List ); _Thread_queue_Enqueue( &api->Join_List, WATCHDOG_NO_TIMEOUT ); } _Objects_Put( &the_thread->Object ); - if ( _Thread_Executing->Wait.return_code == EINTR ) + if ( executing->Wait.return_code == EINTR ) goto on_EINTR; if ( value_ptr ) -- cgit v1.2.3