diff options
Diffstat (limited to 'cpukit/posix/src/pthreadonce.c')
-rw-r--r-- | cpukit/posix/src/pthreadonce.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/cpukit/posix/src/pthreadonce.c b/cpukit/posix/src/pthreadonce.c index 6026dfe7c0..94cbb005da 100644 --- a/cpukit/posix/src/pthreadonce.c +++ b/cpukit/posix/src/pthreadonce.c @@ -18,6 +18,7 @@ #include <pthread.h> #include <errno.h> +#include <rtems.h> #include <rtems/system.h> #include <rtems/score/thread.h> @@ -29,15 +30,16 @@ int pthread_once( if ( !once_control || !init_routine ) return EINVAL; - _Thread_Disable_dispatch(); - if ( !once_control->init_executed ) { - once_control->is_initialized = TRUE; - once_control->init_executed = TRUE; - (*init_routine)(); + rtems_mode saveMode; + rtems_task_mode(RTEMS_NO_PREEMPT, RTEMS_PREEMPT_MASK, &saveMode); + if ( !once_control->init_executed ) { + once_control->is_initialized = TRUE; + once_control->init_executed = TRUE; + (*init_routine)(); + } + rtems_task_mode(saveMode, RTEMS_PREEMPT_MASK, &saveMode); } - - _Thread_Enable_dispatch(); return 0; } |