server: Allow pipe server fd caching throughout its whole lifetime.
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
584ffc2341
commit
32169eafe2
|
@ -1693,16 +1693,6 @@ NTSTATUS WINAPI NtFsControlFile(HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc
|
||||||
if (!status) status = DIR_unmount_device( handle );
|
if (!status) status = DIR_unmount_device( handle );
|
||||||
return status;
|
return status;
|
||||||
|
|
||||||
case FSCTL_PIPE_DISCONNECT:
|
|
||||||
status = server_ioctl_file( handle, event, apc, apc_context, io, code,
|
|
||||||
in_buffer, in_size, out_buffer, out_size );
|
|
||||||
if (!status)
|
|
||||||
{
|
|
||||||
int fd = server_remove_fd_from_cache( handle );
|
|
||||||
if (fd != -1) close( fd );
|
|
||||||
}
|
|
||||||
return status;
|
|
||||||
|
|
||||||
case FSCTL_PIPE_IMPERSONATE:
|
case FSCTL_PIPE_IMPERSONATE:
|
||||||
FIXME("FSCTL_PIPE_IMPERSONATE: impersonating self\n");
|
FIXME("FSCTL_PIPE_IMPERSONATE: impersonating self\n");
|
||||||
status = RtlImpersonateSelf( SecurityImpersonation );
|
status = RtlImpersonateSelf( SecurityImpersonation );
|
||||||
|
|
|
@ -1126,6 +1126,7 @@ static struct pipe_server *create_pipe_server( struct named_pipe *pipe, unsigned
|
||||||
release_object( server );
|
release_object( server );
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
allow_fd_caching( server->pipe_end.fd );
|
||||||
set_fd_signaled( server->pipe_end.fd, 1 );
|
set_fd_signaled( server->pipe_end.fd, 1 );
|
||||||
set_server_state( server, ps_idle_server );
|
set_server_state( server, ps_idle_server );
|
||||||
return server;
|
return server;
|
||||||
|
@ -1218,7 +1219,6 @@ static struct object *named_pipe_open_file( struct object *obj, unsigned int acc
|
||||||
|
|
||||||
if ((client = create_pipe_client( options, pipe->flags, pipe->outsize, options )))
|
if ((client = create_pipe_client( options, pipe->flags, pipe->outsize, options )))
|
||||||
{
|
{
|
||||||
allow_fd_caching( server->pipe_end.fd );
|
|
||||||
if (server->state == ps_wait_open)
|
if (server->state == ps_wait_open)
|
||||||
fd_async_wake_up( server->pipe_end.fd, ASYNC_TYPE_WAIT, STATUS_SUCCESS );
|
fd_async_wake_up( server->pipe_end.fd, ASYNC_TYPE_WAIT, STATUS_SUCCESS );
|
||||||
server->pipe_end.state = FILE_PIPE_CONNECTED_STATE;
|
server->pipe_end.state = FILE_PIPE_CONNECTED_STATE;
|
||||||
|
|
Loading…
Reference in New Issue