Re: [PATCH 3/4] lwip: return EINTR when a select() IPC thread is cancelled

2018-08-13 Thread Samuel Thibault
Joan Lledó, le sam. 11 août 2018 18:17:09 +0200, a ecrit:
> Needed to properly support poll in glibc (_hurd_select).
> 
> * lwip/io-ops.c (lwip_io_select_common): Detect when the
> current RPC is cancelled by checking the reply port.

Applied, thanks!

> ---
>  lwip/io-ops.c | 8 
>  1 file changed, 8 insertions(+)
> 
> diff --git a/lwip/io-ops.c b/lwip/io-ops.c
> index 1429bc55..72e08e26 100644
> --- a/lwip/io-ops.c
> +++ b/lwip/io-ops.c
> @@ -198,6 +198,8 @@ lwip_io_select_common (struct sock_user *user,
>int timeout;
>struct pollfd fdp;
>nfds_t nfds;
> +  mach_port_type_t type;
> +  error_t err;
>  
>if (!user)
>  return EOPNOTSUPP;
> @@ -227,6 +229,12 @@ lwip_io_select_common (struct sock_user *user,
>timeout = tv ? tv->tv_sec * 1000 + tv->tv_nsec / 100 : -1;
>ret = lwip_poll (&fdp, nfds, timeout);
>  
> +  err = mach_port_type (mach_task_self (), reply, &type);
> +  if (err || (type & MACH_PORT_TYPE_DEAD_NAME))
> +/* The reply port is dead, we were cancelled */
> +return EINTR;
> +
> +
>if (ret > 0)
>  {
>if (fdp.revents & POLLERR)
> -- 
> 2.11.0
> 
> 

-- 
Samuel
 l'autre jour j'ai eu un type qu'est venu me demander « J'ai installé le
logiciel comme indiqué sur le site. Puis quand je le lance ça plante et ça me
marque “Voulez-vous envoyez un rapport d'erreur ?”. Je fais quoi ?! »
  -+- ... -+-



[PATCH 3/4] lwip: return EINTR when a select() IPC thread is cancelled

2018-08-11 Thread Joan Lledó
Needed to properly support poll in glibc (_hurd_select).

* lwip/io-ops.c (lwip_io_select_common): Detect when the
current RPC is cancelled by checking the reply port.
---
 lwip/io-ops.c | 8 
 1 file changed, 8 insertions(+)

diff --git a/lwip/io-ops.c b/lwip/io-ops.c
index 1429bc55..72e08e26 100644
--- a/lwip/io-ops.c
+++ b/lwip/io-ops.c
@@ -198,6 +198,8 @@ lwip_io_select_common (struct sock_user *user,
   int timeout;
   struct pollfd fdp;
   nfds_t nfds;
+  mach_port_type_t type;
+  error_t err;
 
   if (!user)
 return EOPNOTSUPP;
@@ -227,6 +229,12 @@ lwip_io_select_common (struct sock_user *user,
   timeout = tv ? tv->tv_sec * 1000 + tv->tv_nsec / 100 : -1;
   ret = lwip_poll (&fdp, nfds, timeout);
 
+  err = mach_port_type (mach_task_self (), reply, &type);
+  if (err || (type & MACH_PORT_TYPE_DEAD_NAME))
+/* The reply port is dead, we were cancelled */
+return EINTR;
+
+
   if (ret > 0)
 {
   if (fdp.revents & POLLERR)
-- 
2.11.0




[PATCH 3/4] lwip: return EINTR when a select() IPC thread is cancelled

2018-08-07 Thread Joan Lledó
---
 lwip/io-ops.c | 8 
 1 file changed, 8 insertions(+)

diff --git a/lwip/io-ops.c b/lwip/io-ops.c
index 1429bc55..72e08e26 100644
--- a/lwip/io-ops.c
+++ b/lwip/io-ops.c
@@ -198,6 +198,8 @@ lwip_io_select_common (struct sock_user *user,
   int timeout;
   struct pollfd fdp;
   nfds_t nfds;
+  mach_port_type_t type;
+  error_t err;
 
   if (!user)
 return EOPNOTSUPP;
@@ -227,6 +229,12 @@ lwip_io_select_common (struct sock_user *user,
   timeout = tv ? tv->tv_sec * 1000 + tv->tv_nsec / 100 : -1;
   ret = lwip_poll (&fdp, nfds, timeout);
 
+  err = mach_port_type (mach_task_self (), reply, &type);
+  if (err || (type & MACH_PORT_TYPE_DEAD_NAME))
+/* The reply port is dead, we were cancelled */
+return EINTR;
+
+
   if (ret > 0)
 {
   if (fdp.revents & POLLERR)
-- 
2.17.1