From 6c3bddd257cc521db0d5bf5fb9524fdd234e038e Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sat, 18 Sep 2010 08:31:12 +0000 Subject: Fixed bug 3069854, fixed documentation article about events. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@2180 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/kernel/src/chthreads.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) (limited to 'os/kernel') diff --git a/os/kernel/src/chthreads.c b/os/kernel/src/chthreads.c index 33ba3741e..5bcadb96d 100644 --- a/os/kernel/src/chthreads.c +++ b/os/kernel/src/chthreads.c @@ -67,14 +67,15 @@ */ Thread *init_thread(Thread *tp, tprio_t prio) { - tp->p_flags = THD_MEM_MODE_STATIC; tp->p_prio = prio; tp->p_state = THD_STATE_SUSPENDED; -#if CH_USE_REGISTRY - REG_INSERT(tp); + tp->p_flags = THD_MEM_MODE_STATIC; +#if CH_USE_MUTEXES + tp->p_realprio = prio; + tp->p_mtxlist = NULL; #endif -#if CH_USE_DYNAMIC - tp->p_refs = 1; +#if CH_USE_EVENTS + tp->p_epending = 0; #endif #if CH_USE_NESTED_LOCKS tp->p_locks = 0; @@ -82,9 +83,8 @@ Thread *init_thread(Thread *tp, tprio_t prio) { #if CH_DBG_THREADS_PROFILING tp->p_time = 0; #endif -#if CH_USE_MUTEXES - tp->p_realprio = prio; - tp->p_mtxlist = NULL; +#if CH_USE_DYNAMIC + tp->p_refs = 1; #endif #if CH_USE_WAITEXIT list_init(&tp->p_waiting); @@ -92,8 +92,10 @@ Thread *init_thread(Thread *tp, tprio_t prio) { #if CH_USE_MESSAGES queue_init(&tp->p_msgqueue); #endif -#if CH_USE_EVENTS - tp->p_epending = 0; +#if CH_USE_REGISTRY + chSysLock(); + REG_INSERT(tp); + chSysUnlock(); #endif #if defined(THREAD_EXT_EXIT_HOOK) THREAD_EXT_INIT_HOOK(tp); @@ -117,9 +119,6 @@ static void memfill(uint8_t *startp, uint8_t *endp, uint8_t v) { * @p chThdResume(). * @note A thread can terminate by calling @p chThdExit() or by simply * returning from its main function. - * @note This function can be invoked from within an interrupt handler - * even if it is not an I-Class API because it does not touch - * any critical kernel data structure. * * @param[out] wsp pointer to a working area dedicated to the thread stack * @param[in] size size of the working area @@ -461,6 +460,8 @@ void chThdRelease(Thread *tp) { * Please read the @ref article_lifecycle article for more details. * @pre The configuration option @p CH_USE_WAITEXIT must be enabled in * order to use this function. + * @post Enabling @p chThdWait() requires 2-4 (depending on the + * architecture) extra bytes in the @p Thread structure. * @post After invoking @p chThdWait() the thread pointer becomes invalid * and must not be used as parameter for further system calls. * @note If @p CH_USE_DYNAMIC is not specified this function just waits for -- cgit v1.2.3