Bläddra i källkod

Ignore handling SIG_DFL/SIG_IGN for previous sig action (#2589)

Wenyong Huang 2 år sedan
förälder
incheckning
a50a438461
1 ändrade filer med 6 tillägg och 8 borttagningar
  1. 6 8
      core/shared/platform/common/posix/posix_thread.c

+ 6 - 8
core/shared/platform/common/posix/posix_thread.c

@@ -543,14 +543,12 @@ signal_callback(int sig_num, siginfo_t *sig_info, void *sig_ucontext)
     if (prev_sig_act && (prev_sig_act->sa_flags & SA_SIGINFO)) {
         prev_sig_act->sa_sigaction(sig_num, sig_info, sig_ucontext);
     }
-    else if (prev_sig_act && (void *)prev_sig_act->sa_handler == SIG_DFL) {
-        /* Default action */
-        sigaction(sig_num, prev_sig_act, NULL);
-    }
-    else if (prev_sig_act && (void *)prev_sig_act->sa_handler == SIG_IGN) {
-        /* Ignore this signal */
-    }
-    else if (prev_sig_act && prev_sig_act->sa_handler) {
+    else if (prev_sig_act
+             && prev_sig_act->sa_handler
+             /* Filter out SIG_DFL and SIG_IGN here, they will
+                run into the else branch below */
+             && (void *)prev_sig_act->sa_handler != SIG_DFL
+             && (void *)prev_sig_act->sa_handler != SIG_IGN) {
         prev_sig_act->sa_handler(sig_num);
     }
     /* Output signal info and then crash if signal is unhandled */