Use a helper for determining if a uth handles sigs
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 7 Sep 2016 20:59:23 +0000 (16:59 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Fri, 16 Sep 2016 18:35:09 +0000 (14:35 -0400)
I had to look around the .c file to figure out that the existence of data
meant the uthread was handling signals.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
user/parlib/signal.c

index 7d3553d..59a2fd6 100644 (file)
@@ -123,6 +123,11 @@ static bool stack_ptr_is_sane(uintptr_t sp)
        return TRUE;
 }
 
+static bool uth_is_handling_sigs(struct uthread *uth)
+{
+       return uth->sigstate.data ? TRUE : FALSE;
+}
+
 /* Prep a uthread to run a signal handler.  The original context of the uthread
  * is saved on its stack, and a new context is set up to run the signal handler
  * the next time the uthread is run. */
@@ -228,7 +233,7 @@ int uthread_signal(struct uthread *uthread, int signo)
  * handler is complete, the original context will be restored and restarted. */
 void uthread_prep_pending_signals(struct uthread *uthread)
 {
-       if (!uthread->sigstate.data && uthread->sigstate.pending) {
+       if (!uth_is_handling_sigs(uthread) && uthread->sigstate.pending) {
                sigset_t andset = uthread->sigstate.pending & (~uthread->sigstate.mask);
 
                if (!__sigisemptyset(&andset))
@@ -246,7 +251,7 @@ void uthread_prep_signal_from_fault(struct uthread *uthread,
        if (!__sigismember(&uthread->sigstate.mask, signo)) {
                struct siginfo info = {0};
 
-               if (uthread->sigstate.data) {
+               if (uth_is_handling_sigs(uthread)) {
                        printf("Uthread sighandler faulted, signal: %d\n", signo);
                        /* uthread.c already copied out the faulting ctx into the uth */
                        print_user_context(&uthread->u_ctx);