X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Ftimeval.c;h=0ccfa42a38695359657a6449e3b9954bb479b3ae;hb=f196cf974f8df3afdeb56ea58d34e6a9e741663d;hp=163de1e637f7e3cfce77d813da59d692e9af1227;hpb=93456ec8b0935a934b93f7a11b592fcc7cab73ff;p=sliver-openvswitch.git diff --git a/lib/timeval.c b/lib/timeval.c index 163de1e63..0ccfa42a3 100644 --- a/lib/timeval.c +++ b/lib/timeval.c @@ -30,6 +30,7 @@ #include "fatal-signal.h" #include "hash.h" #include "hmap.h" +#include "ovs-thread.h" #include "signals.h" #include "unixctl.h" #include "util.h" @@ -167,35 +168,6 @@ set_up_signal(int flags) xsigaction(SIGALRM, &sa, NULL); } -/* Remove SA_RESTART from the flags for SIGALRM, so that any system call that - * is interrupted by the periodic timer interrupt will return EINTR instead of - * continuing after the signal handler returns. - * - * time_disable_restart() and time_enable_restart() may be usefully wrapped - * around function calls that might otherwise block forever unless interrupted - * by a signal, e.g.: - * - * time_disable_restart(); - * fcntl(fd, F_SETLKW, &lock); - * time_enable_restart(); - */ -void -time_disable_restart(void) -{ - time_init(); - set_up_signal(0); -} - -/* Add SA_RESTART to the flags for SIGALRM, so that any system call that - * is interrupted by the periodic timer interrupt will continue after the - * signal handler returns instead of returning EINTR. */ -void -time_enable_restart(void) -{ - time_init(); - set_up_signal(SA_RESTART); -} - static void set_up_timer(void) { @@ -207,7 +179,7 @@ set_up_timer(void) } if (timer_create(monotonic_clock, NULL, &timer_id)) { - VLOG_FATAL("timer_create failed (%s)", strerror(errno)); + VLOG_FATAL("timer_create failed (%s)", ovs_strerror(errno)); } itimer.it_interval.tv_sec = 0; @@ -215,7 +187,7 @@ set_up_timer(void) itimer.it_value = itimer.it_interval; if (timer_settime(timer_id, 0, &itimer, NULL)) { - VLOG_FATAL("timer_settime failed (%s)", strerror(errno)); + VLOG_FATAL("timer_settime failed (%s)", ovs_strerror(errno)); } } @@ -326,17 +298,13 @@ time_alarm(unsigned int secs) long long int now; long long int msecs; - sigset_t oldsigs; - + assert_single_threaded(); time_init(); time_refresh(); now = time_msec(); msecs = secs * 1000LL; - - block_sigalrm(&oldsigs); deadline = now < LLONG_MAX - msecs ? now + msecs : LLONG_MAX; - unblock_sigalrm(&oldsigs); } /* Like poll(), except: @@ -454,13 +422,13 @@ block_sigalrm(sigset_t *oldsigs) sigset_t sigalrm; sigemptyset(&sigalrm); sigaddset(&sigalrm, SIGALRM); - xsigprocmask(SIG_BLOCK, &sigalrm, oldsigs); + xpthread_sigmask(SIG_BLOCK, &sigalrm, oldsigs); } static void unblock_sigalrm(const sigset_t *oldsigs) { - xsigprocmask(SIG_SETMASK, oldsigs, NULL); + xpthread_sigmask(SIG_SETMASK, oldsigs, NULL); } long long int @@ -488,7 +456,7 @@ void xgettimeofday(struct timeval *tv) { if (gettimeofday(tv, NULL) == -1) { - VLOG_FATAL("gettimeofday failed (%s)", strerror(errno)); + VLOG_FATAL("gettimeofday failed (%s)", ovs_strerror(errno)); } }