+ if (VCOM_DEBUG > 2)
+ fprintf (stderr, "[%d] vcom_socket_epoll_pwait: vcl_cnt = %d, "
+ "libc_cnt = %d -> mixed polling (time_to_wait = %f, "
+ "__timeout = %d)\n",
+ getpid (), vepoll->vcl_cnt, vepoll->libc_cnt,
+ time_to_wait, __timeout);
+ vec_validate (libc_ev, __maxevents);
+ timeout = clib_time_now (&vsm->clib_time) + time_to_wait;
+ do
+ {
+ rv = vppcom_epoll_wait (vep_idx, __events, __maxevents, 0);
+ rv2 = libc_epoll_pwait (__epfd, libc_ev, __maxevents, 1, __ss);
+ if (VCOM_DEBUG == 666)
+ fprintf (stderr, "[%d] vcom_socket_epoll_pwait: "
+ "rv = %d, rv2 = %d, timeout = %f, now = %f\n",
+ getpid (), rv, rv2, timeout, now);
+ if ((rv > 0) || (rv2 > 0))
+ {
+ if (VCOM_DEBUG > 2)
+ fprintf (stderr, "[%d] vcom_socket_epoll_pwait: "
+ "rv = %d, rv2 = %d\n", getpid (), rv, rv2);
+ int n = __maxevents - rv;
+ n = rv2 <= n ? rv2 : n;
+ rv = (rv > 0) ? rv : 0;
+
+ clib_memcpy (&__events[rv], libc_ev, n * sizeof (*libc_ev));
+ rv += rv2;
+ goto out;
+ }
+ else if ((rv < 0) || (rv2 < 0))
+ {
+ if (rv < 0)
+ fprintf (stderr,
+ "[%d] ERROR: vppcom_epoll_wait() returned %d\n",
+ getpid (), rv);
+ if (rv2 < 0)
+ {
+ fprintf (stderr,
+ "[%d] ERROR: libc_epoll_wait() failed, errno %d\n",
+ getpid (), errno);
+ rv = (rv < 0) ? rv : -errno;
+ }
+ goto out;
+ }
+ if (__timeout != -1)
+ now = clib_time_now (&vsm->clib_time);
+ }
+ while (now < timeout);