[Top][All Lists]

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

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

From: Justus Winter
Subject: [PATCH 2/9] libports: work around bugs in server termination
Date: Mon, 28 Apr 2014 12:19:57 +0200

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.

* 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 
       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;
     err = mach_msg_server_timeout (internal_demuxer, 0, bucket->portset, 
                                   timeout ? MACH_RCV_TIMEOUT : 0, timeout);

reply via email to

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