diff --git a/usr.bin/time/time.c b/usr.bin/time/time.c --- a/usr.bin/time/time.c +++ b/usr.bin/time/time.c @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -54,7 +55,7 @@ static void siginfo(int); static void usage(void) __dead2; -static volatile sig_atomic_t siginfo_recvd; +static sig_atomic_t siginfo_recvd; static char decimal_point; static struct timespec before_ts; static int hflag, pflag; @@ -125,6 +126,7 @@ (void)signal(SIGINFO, siginfo); (void)siginterrupt(SIGINFO, 1); while (wait4(pid, &status, 0, &ru) != pid) { + atomic_signal_fence(memory_order_acquire); if (siginfo_recvd) { siginfo_recvd = 0; if (clock_gettime(CLOCK_MONOTONIC, &after)) @@ -296,4 +298,5 @@ { siginfo_recvd = 1; + atomic_signal_fence(memory_order_release); }