server: Always try return a named pipe server that is listening from find_available_server.
We still fallback to an idle server, but this prevents a client from
connecting to a named pipe server that isn't listening.
diff --git a/server/named_pipe.c b/server/named_pipe.c
index 659d680..6db9a7a 100644
--- a/server/named_pipe.c
+++ b/server/named_pipe.c
@@ -772,11 +772,20 @@
{
struct pipe_server *server;
+ /* look for pipe servers that are listening */
LIST_FOR_EACH_ENTRY( server, &pipe->servers, struct pipe_server, entry )
{
- if (server->state == ps_idle_server || server->state == ps_wait_open)
+ if (server->state == ps_wait_open)
return (struct pipe_server *)grab_object( server );
}
+
+ /* fall back to pipe servers that are idle */
+ LIST_FOR_EACH_ENTRY( server, &pipe->servers, struct pipe_server, entry )
+ {
+ if (server->state == ps_idle_server)
+ return (struct pipe_server *)grab_object( server );
+ }
+
return NULL;
}