From a2a8c5b417ae7ed5d3889ff236c2b1b5fb96f2f9 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Thu, 9 May 2002 21:41:05 +0000 Subject: 2001-05-09 Joel Sherrill * src/exinit.c: Slightly rework initialization so there is a valid thread as _Thread_Executing when the pre_tasking hook is called. This allows one directives and malloc to potentially use mutex protection. --- cpukit/sapi/src/exinit.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'cpukit/sapi/src/exinit.c') diff --git a/cpukit/sapi/src/exinit.c b/cpukit/sapi/src/exinit.c index b44f06df64..af921c0510 100644 --- a/cpukit/sapi/src/exinit.c +++ b/cpukit/sapi/src/exinit.c @@ -29,6 +29,9 @@ #include #include +#if 0 +#include +#endif #include #include #include @@ -221,19 +224,24 @@ rtems_interrupt_level rtems_initialize_executive_early( _System_state_Set( SYSTEM_STATE_BEFORE_MULTITASKING ); - if ( cpu_table->pretasking_hook ) - (*cpu_table->pretasking_hook)(); - /* * No threads should be created before this point!!! + * _Thread_Executing and _Thread_Heir are not set. * * At this point all API extensions are in place. After the call to - * _Thread_Create_idle() _Thread_Executing will be set. - * and _Thread_Heir are not set yet. + * _Thread_Create_idle() _Thread_Executing and _Thread_Heir will be set. */ _Thread_Create_idle(); + + /* + * Scheduling can properly occur now as long as we avoid dispatching. + */ + + if ( cpu_table->pretasking_hook ) + (*cpu_table->pretasking_hook)(); + #if defined(RTEMS_MULTIPROCESSING) _MPCI_Create_server(); #endif -- cgit v1.2.3