Merge pull request #2329 from RT-Thread/fix_pthread
[ptherad] Fix pthread_exit issue
This commit is contained in:
commit
65b7f438ff
|
@ -346,12 +346,6 @@ void pthread_exit(void *value)
|
|||
ptd->tls = RT_NULL;
|
||||
}
|
||||
|
||||
if (ptd->attr.detachstate == PTHREAD_CREATE_JOINABLE)
|
||||
{
|
||||
/* release the joinable pthread */
|
||||
rt_sem_release(ptd->joinable_sem);
|
||||
}
|
||||
|
||||
/* detach thread */
|
||||
rt_thread_detach(ptd->tid);
|
||||
/* reschedule thread */
|
||||
|
|
13
src/thread.c
13
src/thread.c
|
@ -347,17 +347,17 @@ rt_err_t rt_thread_detach(rt_thread_t thread)
|
|||
/* change stat */
|
||||
thread->stat = RT_THREAD_CLOSE;
|
||||
|
||||
/* detach object */
|
||||
rt_object_detach((rt_object_t)thread);
|
||||
|
||||
if (thread->cleanup != RT_NULL)
|
||||
if ((rt_object_is_systemobject((rt_object_t)thread) == RT_TRUE) &&
|
||||
thread->cleanup == RT_NULL)
|
||||
{
|
||||
rt_object_detach((rt_object_t)thread);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* disable interrupt */
|
||||
lock = rt_hw_interrupt_disable();
|
||||
|
||||
/* insert to defunct thread list */
|
||||
rt_list_insert_after(&rt_thread_defunct, &(thread->tlist));
|
||||
|
||||
/* enable interrupt */
|
||||
rt_hw_interrupt_enable(lock);
|
||||
}
|
||||
|
@ -366,7 +366,6 @@ rt_err_t rt_thread_detach(rt_thread_t thread)
|
|||
}
|
||||
RTM_EXPORT(rt_thread_detach);
|
||||
|
||||
|
||||
#ifdef RT_USING_HEAP
|
||||
/**
|
||||
* This function will create a thread object and allocate thread object memory
|
||||
|
|
Loading…
Reference in New Issue