[PATCH 03/26] posix: Simplify cleanup push/pop

Sebastian Huber sebastian.huber at embedded-brains.de
Tue Nov 15 13:51:35 UTC 2016


The POSIX cleanup list must be proteced from asynchronous thread
deletion.  Here local interrupt disable is sufficient.
---
 cpukit/posix/src/cleanuppush.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/cpukit/posix/src/cleanuppush.c b/cpukit/posix/src/cleanuppush.c
index 0e55458..d3d7c8f 100644
--- a/cpukit/posix/src/cleanuppush.c
+++ b/cpukit/posix/src/cleanuppush.c
@@ -31,8 +31,8 @@ void _pthread_cleanup_push(
   void                              *arg
 )
 {
-  Per_CPU_Control *cpu_self;
-  Thread_Control  *executing;
+  ISR_Level       level;
+  Thread_Control *executing;
 
   context->_routine = routine;
   context->_arg = arg;
@@ -40,13 +40,13 @@ void _pthread_cleanup_push(
   /* This value is unused, just provide a deterministic value */
   context->_canceltype = -1;
 
-  cpu_self = _Thread_Dispatch_disable();
+  _ISR_Local_disable( level );
 
-  executing = _Per_CPU_Get_executing( cpu_self );
+  executing = _Thread_Executing;
   context->_previous = executing->last_cleanup_context;
   executing->last_cleanup_context = context;
 
-  _Thread_Dispatch_enable( cpu_self );
+  _ISR_Local_enable( level );
 }
 
 void _pthread_cleanup_pop(
@@ -54,19 +54,19 @@ void _pthread_cleanup_pop(
   int                              execute
 )
 {
-  Per_CPU_Control *cpu_self;
-  Thread_Control  *executing;
+  ISR_Level       level;
+  Thread_Control *executing;
 
   if ( execute != 0 ) {
     ( *context->_routine )( context->_arg );
   }
 
-  cpu_self = _Thread_Dispatch_disable();
+  _ISR_Local_disable( level );
 
-  executing = _Per_CPU_Get_executing( cpu_self );
+  executing = _Thread_Executing;
   executing->last_cleanup_context = context->_previous;
 
-  _Thread_Dispatch_enable( cpu_self );
+  _ISR_Local_enable( level );
 }
 
 static void _POSIX_Cleanup_terminate_extension( Thread_Control *the_thread )
-- 
1.8.4.5



More information about the devel mailing list