Преглед изворни кода

SIGCHLD和SIGCONT且无注册处理函数时,默认忽略

shaojinchun пре 5 година
родитељ
комит
e87dfc1d32
1 измењених фајлова са 18 додато и 0 уклоњено
  1. 18 0
      components/lwp/lwp_signal.c

+ 18 - 0
components/lwp/lwp_signal.c

@@ -263,6 +263,15 @@ struct rt_user_context *lwp_signal_restore(void)
     return ctx;
 }
 
+rt_inline int _lwp_check_ignore(int sig)
+{
+    if (sig == SIGCHLD || sig == SIGCONT)
+    {
+        return 1;
+    }
+    return 0;
+}
+
 void sys_exit(int value);
 lwp_sighandler_t lwp_sighandler_get(int sig)
 {
@@ -281,6 +290,10 @@ lwp_sighandler_t lwp_sighandler_get(int sig)
         func = rt_thread_self()->signal_handler[sig - 1];
         if (!func)
         {
+            if (_lwp_check_ignore(sig))
+            {
+                goto out;
+            }
             lwp = (struct rt_lwp*)thread->lwp;
             main_thread = rt_list_entry(lwp->t_grp.prev, struct rt_thread, sibling);
             if (thread == main_thread)
@@ -306,10 +319,15 @@ lwp_sighandler_t lwp_sighandler_get(int sig)
         func = lwp->signal_handler[sig - 1];
         if (!func)
         {
+            if (_lwp_check_ignore(sig))
+            {
+                goto out;
+            }
             main_thread = rt_list_entry(lwp->t_grp.prev, struct rt_thread, sibling);
             lwp_thread_kill(main_thread, SIGKILL);
         }
     }
+out:
     rt_hw_interrupt_enable(level);
     return func;
 }