epoll_input: don't sleep if we expect event in less than 1 ms
authorDamjan Marion <[email protected]>
Wed, 7 Dec 2016 13:07:54 +0000 (14:07 +0100)
committerNeale Ranns <[email protected]>
Wed, 7 Dec 2016 14:54:53 +0000 (14:54 +0000)
Change-Id: I81652fb04608d805497a600c7dc8041911bbf39a
Signed-off-by: Damjan Marion <[email protected]>
vlib/vlib/unix/input.c

index b4f2ba5..07096ed 100644 (file)
@@ -112,11 +112,21 @@ linux_epoll_input (vlib_main_t * vm,
          (((i64) t - (i64) clib_cpu_time_now ())
           * vm->clib_time.seconds_per_clock)
          /* subtract off some slop time */  - 50e-6;
-       timeout_ms = timeout * 1e3;
 
-       /* Must be between 1 and 10 ms. */
-       timeout_ms = clib_max (1, timeout_ms);
-       timeout_ms = clib_min (max_timeout_ms, timeout_ms);
+       if (timeout < 1e3)
+         {
+           /* We have event happenning in less than 1 ms so
+              don't allow epoll to wait */
+           timeout_ms = 0;
+         }
+       else
+         {
+           timeout_ms = timeout * 1e3;
+
+           /* Must be between 1 and 10 ms. */
+           timeout_ms = clib_max (1, timeout_ms);
+           timeout_ms = clib_min (max_timeout_ms, timeout_ms);
+         }
       }
 
     /* If we still have input nodes polling (e.g. vnet packet generator)