bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 2/9] libports: work around bugs in server termination


From: Samuel Thibault
Subject: Re: [PATCH 2/9] libports: work around bugs in server termination
Date: Mon, 28 Apr 2014 12:31:07 +0200
User-agent: Mutt/1.5.21+34 (58baf7c9f32f) (2010-12-30)

Justus Winter, le Mon 28 Apr 2014 12:19:57 +0200, a écrit :
> Some servers use ports_manage_port_operations_one_thread to process
> requests and terminate when it returns. Since many of them don't detach
> before shutting down, a client may receive an error if its request
> arrived while the server is shutting down. Prevent those spurious errors
> by forcing ports_manage_port_operations_one_thread not to return.
> 
> This is the same change as 235491231bdd1fd93507c835767503f047e10b91
> introduced for ports_manage_port_operations_multithread.

Ack.

> * libports/manage-one-thread.c
> (ports_manage_port_operations_one_thread): Force timeout to 0.
> ---
>  libports/manage-one-thread.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/libports/manage-one-thread.c b/libports/manage-one-thread.c
> index 4ea740b..cbd2df7 100644
> --- a/libports/manage-one-thread.c
> +++ b/libports/manage-one-thread.c
> @@ -85,7 +85,14 @@ ports_manage_port_operations_one_thread (struct 
> port_bucket *bucket,
>  
>        return status;
>      }
> -  
> +
> +  /* XXX It is currently unsafe for most servers to terminate based on
> +     inactivity because a request may arrive after a server has
> +     started shutting down, causing the client to receive an error.
> +     Prevent the service loop from terminating by setting TIMEOUT to
> +     zero.  */
> +  timeout = 0;
> +
>    do
>      err = mach_msg_server_timeout (internal_demuxer, 0, bucket->portset, 
>                                  timeout ? MACH_RCV_TIMEOUT : 0, timeout);
> -- 
> 1.9.2
> 

-- 
Samuel
quit   When the quit statement is read, the  bc  processor
       is  terminated, regardless of where the quit state-
       ment is found.  For example, "if  (0  ==  1)  quit"
       will cause bc to terminate.
(Seen in the manpage for "bc". Note the "if" statement's logic)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]