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)