X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Ftimeval.c;h=ebbdb98439c3026b38ca2fd63dc3222a89b14a25;hb=cfc50ae514f805dcd9c14589f21158185424daf6;hp=ef806e7627db162f0e62d0f3fd3aeab7fd70156a;hpb=eb1ddf985264657b533275d488979d78a3acb15f;p=sliver-openvswitch.git diff --git a/lib/timeval.c b/lib/timeval.c index ef806e762..ebbdb9843 100644 --- a/lib/timeval.c +++ b/lib/timeval.c @@ -31,6 +31,7 @@ #include "fatal-signal.h" #include "hash.h" #include "hmap.h" +#include "ovs-rcu.h" #include "ovs-thread.h" #include "signals.h" #include "seq.h" @@ -286,6 +287,12 @@ time_poll(struct pollfd *pollfds, int n_pollfds, HANDLE *handles OVS_UNUSED, time_left = timeout_when - now; } + if (!time_left) { + ovsrcu_quiesce(); + } else { + ovsrcu_quiesce_start(); + } + #ifndef _WIN32 retval = poll(pollfds, n_pollfds, time_left); if (retval < 0) { @@ -306,6 +313,10 @@ time_poll(struct pollfd *pollfds, int n_pollfds, HANDLE *handles OVS_UNUSED, } #endif + if (time_left) { + ovsrcu_quiesce_end(); + } + if (deadline <= time_msec()) { #ifndef _WIN32 fatal_signal_handler(SIGALRM);