Disable thread dispatching is enough to prevent deletion of the executing thread. There is no need for an additional life protection.
Update #2555. Update #2626. --- cpukit/posix/src/pthreadexit.c | 3 --- cpukit/rtems/src/taskdelete.c | 6 ------ cpukit/score/src/threadrestart.c | 3 --- 3 files changed, 12 deletions(-) diff --git a/cpukit/posix/src/pthreadexit.c b/cpukit/posix/src/pthreadexit.c index 940fa38..559e37c 100644 --- a/cpukit/posix/src/pthreadexit.c +++ b/cpukit/posix/src/pthreadexit.c @@ -34,13 +34,11 @@ void _POSIX_Thread_Exit( Thread_Control *executing; Thread_Control *unblocked; POSIX_API_Control *api; - bool previous_life_protection; api = the_thread->API_Extensions[ THREAD_API_POSIX ]; _Assert( _Debug_Is_thread_dispatching_allowed() ); - previous_life_protection = _Thread_Set_life_protection( true ); _Thread_Disable_dispatch(); the_thread->Wait.return_argument = value_ptr; @@ -74,7 +72,6 @@ void _POSIX_Thread_Exit( } _Thread_Enable_dispatch(); - _Thread_Set_life_protection( previous_life_protection ); } void pthread_exit( diff --git a/cpukit/rtems/src/taskdelete.c b/cpukit/rtems/src/taskdelete.c index c0d46d8..5830793 100644 --- a/cpukit/rtems/src/taskdelete.c +++ b/cpukit/rtems/src/taskdelete.c @@ -30,9 +30,7 @@ rtems_status_code rtems_task_delete( Thread_Control *the_thread; Thread_Control *executing; Objects_Locations location; - bool previous_life_protection; - previous_life_protection = _Thread_Set_life_protection( true ); the_thread = _Thread_Get( id, &location ); switch ( location ) { @@ -60,13 +58,11 @@ rtems_status_code rtems_task_delete( } _Objects_Put( &the_thread->Object ); - _Thread_Set_life_protection( previous_life_protection ); return RTEMS_SUCCESSFUL; #if defined(RTEMS_MULTIPROCESSING) case OBJECTS_REMOTE: _Thread_Dispatch(); - _Thread_Set_life_protection( previous_life_protection ); return RTEMS_ILLEGAL_ON_REMOTE_OBJECT; #endif @@ -74,7 +70,5 @@ rtems_status_code rtems_task_delete( break; } - _Thread_Set_life_protection( previous_life_protection ); - return RTEMS_INVALID_ID; } diff --git a/cpukit/score/src/threadrestart.c b/cpukit/score/src/threadrestart.c index 0184fd1..272fe7b 100644 --- a/cpukit/score/src/threadrestart.c +++ b/cpukit/score/src/threadrestart.c @@ -340,7 +340,6 @@ static void _Thread_Request_life_change( void _Thread_Close( Thread_Control *the_thread, Thread_Control *executing ) { - _Assert( _Thread_Is_life_protected( executing->Life.state ) ); _Assert( the_thread != executing ); if ( _States_Is_dormant( the_thread->current_state ) ) { @@ -367,8 +366,6 @@ void _Thread_Close( Thread_Control *the_thread, Thread_Control *executing ) void _Thread_Exit( Thread_Control *executing ) { - _Assert( _Thread_Is_life_protected( executing->Life.state ) ); - _Thread_Request_life_change( executing, executing, -- 1.8.4.5 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel