|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT/LWIP PATCH] sockets.c: Add ppoll() function
Looks good to me, as this is the same code as described in the man
page of ppoll. I have a mention that, below this code, it is stated
that:
The above code segment is described as nearly equivalent
because whereas a negative timeout value for poll()
is interpreted as an infinite timeout, a negative value
expressed in *tmo_p results in an error from
ppoll().
I believe this case should also be treated, right? The man page says
below that the function should return -1 in that case and set errno to
EINVAL (ppoll()) The timeout value expressed in *ip is invalid
(negative).
Stefan
On Mon, Nov 25, 2019 at 9:47 AM Costin Lupu <costin.lupu@xxxxxxxxx> wrote:
>
> This ppoll() implementation is adapted from its man page.
>
> Signed-off-by: Costin Lupu <costin.lupu@xxxxxxxxx>
> ---
> Config.uk | 6 ++++++
> sockets.c | 26 ++++++++++++++++++++++++++
> 2 files changed, 32 insertions(+)
>
> diff --git a/Config.uk b/Config.uk
> index 8f501fc..debf0c7 100644
> --- a/Config.uk
> +++ b/Config.uk
> @@ -170,6 +170,12 @@ if LWIP_SOCKET
> lwip's select() implementation supports only sockets.
> This
> configuration option makes it possible to use other
> file descriptor
> types as well, even though they are not supported by
> lwip.
> +
> + config LWIP_SOCKET_PPOLL
> + bool "Enable ppoll()"
> + default y
> + help
> + Enable ppoll() implementation.
> endif
>
> menuconfig LWIP_DEBUG
> diff --git a/sockets.c b/sockets.c
> index c2cf57f..5b499af 100644
> --- a/sockets.c
> +++ b/sockets.c
> @@ -34,7 +34,11 @@
> */
>
> /* network stub calls */
> +#include <uk/config.h>
> #include <sys/time.h>
> +#if CONFIG_LWIP_SOCKET_PPOLL
> +#include <signal.h>
> +#endif
> #include <vfscore/dentry.h>
> #include <vfscore/file.h>
> #include <vfscore/fs.h>
> @@ -473,6 +477,28 @@ EXIT:
> return ret;
> }
>
> +#if CONFIG_LWIP_SOCKET_PPOLL
> +#if CONFIG_LIBPTHREAD_EMBEDDED
> +#define __sigmask pthread_sigmask
> +#else
> +#define __sigmask sigprocmask
> +#endif
> +int ppoll(struct pollfd *fds, nfds_t nfds, const struct timespec *tmo_p,
> + const sigset_t *sigmask)
> +{
> + sigset_t origmask;
> + int timeout, rc;
> +
> + timeout = (tmo_p == NULL) ? -1 :
> + (tmo_p->tv_sec * 1000 + tmo_p->tv_nsec / 1000000);
> + __sigmask(SIG_SETMASK, sigmask, &origmask);
> + rc = poll(fds, nfds, timeout);
> + __sigmask(SIG_SETMASK, &origmask, NULL);
> +
> + return rc;
> +}
> +#endif /* CONFIG_LWIP_SOCKET_PPOLL */
> +
> int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
> struct timeval *timeout)
> {
> --
> 2.20.1
>
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |