[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)