server: A named pipe wait can be satisfied by an idle pipe server too.
This commit is contained in:
parent
c0fca0a186
commit
73e0e8bf17
|
@ -666,25 +666,13 @@ static struct pipe_client *create_pipe_client( unsigned int flags )
|
||||||
return client;
|
return client;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline struct pipe_server *find_server( struct named_pipe *pipe, enum pipe_state state )
|
static struct pipe_server *find_available_server( struct named_pipe *pipe )
|
||||||
{
|
{
|
||||||
struct pipe_server *server;
|
struct pipe_server *server;
|
||||||
|
|
||||||
LIST_FOR_EACH_ENTRY( server, &pipe->servers, struct pipe_server, entry )
|
LIST_FOR_EACH_ENTRY( server, &pipe->servers, struct pipe_server, entry )
|
||||||
{
|
{
|
||||||
if (server->state == state) return (struct pipe_server *)grab_object( server );
|
if (server->state == ps_idle_server || server->state == ps_wait_open)
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline struct pipe_server *find_server2( struct named_pipe *pipe,
|
|
||||||
enum pipe_state state1, enum pipe_state state2 )
|
|
||||||
{
|
|
||||||
struct pipe_server *server;
|
|
||||||
|
|
||||||
LIST_FOR_EACH_ENTRY( server, &pipe->servers, struct pipe_server, entry )
|
|
||||||
{
|
|
||||||
if (server->state == state1 || server->state == state2)
|
|
||||||
return (struct pipe_server *)grab_object( server );
|
return (struct pipe_server *)grab_object( server );
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -698,7 +686,7 @@ static struct object *named_pipe_open_file( struct object *obj, unsigned int acc
|
||||||
struct pipe_client *client;
|
struct pipe_client *client;
|
||||||
int fds[2];
|
int fds[2];
|
||||||
|
|
||||||
if (!(server = find_server2( pipe, ps_idle_server, ps_wait_open )))
|
if (!(server = find_available_server( pipe )))
|
||||||
{
|
{
|
||||||
set_error( STATUS_PIPE_NOT_AVAILABLE );
|
set_error( STATUS_PIPE_NOT_AVAILABLE );
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -867,7 +855,7 @@ DECL_HANDLER(wait_named_pipe)
|
||||||
set_error( STATUS_PIPE_NOT_AVAILABLE );
|
set_error( STATUS_PIPE_NOT_AVAILABLE );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
server = find_server( pipe, ps_wait_open );
|
server = find_available_server( pipe );
|
||||||
if (!server)
|
if (!server)
|
||||||
{
|
{
|
||||||
if (req->timeout == NMPWAIT_WAIT_FOREVER)
|
if (req->timeout == NMPWAIT_WAIT_FOREVER)
|
||||||
|
|
Loading…
Reference in New Issue