Add exit function when exit from a module.
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@2437 bbd45198-f89e-11dd-88c7-29a3b14d5316
This commit is contained in:
parent
b820365317
commit
6698e69fc8
|
@ -386,8 +386,51 @@ _free_r (struct _reent *ptr, void *addr)
|
||||||
void
|
void
|
||||||
_exit (int status)
|
_exit (int status)
|
||||||
{
|
{
|
||||||
|
#ifdef RT_USING_MODULE
|
||||||
|
rt_module_t module;
|
||||||
|
|
||||||
|
module = rt_module_self();
|
||||||
|
if (module != RT_NULL)
|
||||||
|
{
|
||||||
|
struct rt_list_node *list;
|
||||||
|
struct rt_object *object;
|
||||||
|
|
||||||
|
rt_enter_critical();
|
||||||
|
|
||||||
|
/* delete all threads in the module */
|
||||||
|
list = &module->module_object[RT_Object_Class_Thread].object_list;
|
||||||
|
while (list->next != list)
|
||||||
|
{
|
||||||
|
object = rt_list_entry(list->next, struct rt_object, list);
|
||||||
|
if (rt_object_is_systemobject(object) == RT_TRUE)
|
||||||
|
{
|
||||||
|
/* detach static object */
|
||||||
|
rt_thread_detach((rt_thread_t)object);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* delete dynamic object */
|
||||||
|
rt_thread_delete((rt_thread_t)object);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* delete main thread */
|
||||||
|
rt_thread_delete(module->module_thread);
|
||||||
|
rt_exit_critical();
|
||||||
|
|
||||||
|
/* re-schedule */
|
||||||
|
rt_schedule();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
rt_kprintf("thread:%s exit with %d\n", rt_thread_self()->name, status);
|
rt_kprintf("thread:%s exit with %d\n", rt_thread_self()->name, status);
|
||||||
RT_ASSERT(0);
|
RT_ASSERT(0);
|
||||||
|
|
||||||
while (1);
|
while (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_system(const char *s)
|
||||||
|
{
|
||||||
|
/* not support this call */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue