parlib: Use a relative timer for abort_sysc
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 15 Jun 2018 21:30:34 +0000 (17:30 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Fri, 15 Jun 2018 21:30:34 +0000 (17:30 -0400)
The issue is that the timer goes off before the syscall could block.  If
the timer was very far in the past, such as due to a go test that put the
alarm 30 seconds in the past, we would do N loops, each of which fires
instantly, until we finally set an alarm for the future.

Using a relative timer fixes that.  Also, one second is a bit much - enough
that an interactive user might notice and wonder if something is broken.

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

index 4878bf4..0e1b336 100644 (file)
@@ -478,7 +478,7 @@ void alarm_abort_sysc(struct alarm_waiter *awaiter)
                 * unblocking, or even has returned, but hasn't cancelled the alarm.
                 * regardless, we request a new alarm (the uthread will cancel us one
                 * way or another). */
-               set_awaiter_inc(awaiter, 1000000);
+               set_awaiter_rel(awaiter, 10000);
                __set_alarm(awaiter);
                return;
        }