|
@@ -288,6 +288,8 @@ _free_r (struct _reent *ptr, void *addr)
|
|
|
void
|
|
|
exit (int status)
|
|
|
{
|
|
|
+ rt_thread_t self = rt_thread_self();
|
|
|
+
|
|
|
#ifdef RT_USING_MODULE
|
|
|
if (dlmodule_self())
|
|
|
{
|
|
@@ -295,10 +297,12 @@ exit (int status)
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
- rt_kprintf("thread:%s exit with %d\n", rt_thread_self()->name, status);
|
|
|
- RT_ASSERT(0);
|
|
|
-
|
|
|
- while (1);
|
|
|
+ if (self != RT_NULL)
|
|
|
+ {
|
|
|
+ rt_kprintf("thread:%-8.*s exit:%d!\n", RT_NAME_MAX, self->name, status);
|
|
|
+ rt_thread_suspend(self);
|
|
|
+ rt_schedule();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void
|
|
@@ -315,17 +319,21 @@ void __libc_init_array(void)
|
|
|
|
|
|
void abort(void)
|
|
|
{
|
|
|
- if (rt_thread_self())
|
|
|
+ rt_thread_t self = rt_thread_self();
|
|
|
+
|
|
|
+#ifdef RT_USING_MODULE
|
|
|
+ if (dlmodule_self())
|
|
|
{
|
|
|
- rt_thread_t self = rt_thread_self();
|
|
|
+ dlmodule_exit(-1);
|
|
|
+ }
|
|
|
+#endif
|
|
|
|
|
|
+ if (self != RT_NULL)
|
|
|
+ {
|
|
|
rt_kprintf("thread:%-8.*s abort!\n", RT_NAME_MAX, self->name);
|
|
|
rt_thread_suspend(self);
|
|
|
-
|
|
|
rt_schedule();
|
|
|
}
|
|
|
-
|
|
|
- while (1);
|
|
|
}
|
|
|
|
|
|
uid_t getuid(void)
|