Jacek Caban : server: Get rid of no longer used support for flush on socket-based named pipes.
Alexandre Julliard
julliard at winehq.org
Wed Oct 4 15:37:15 CDT 2017
Module: wine
Branch: master
Commit: f16f7dc8ce0a425bc8a5e6173b09023d25faca2d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=f16f7dc8ce0a425bc8a5e6173b09023d25faca2d
Author: Jacek Caban <jacek at codeweavers.com>
Date: Wed Oct 4 15:18:53 2017 +0200
server: Get rid of no longer used support for flush on socket-based named pipes.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
server/named_pipe.c | 112 +++++-----------------------------------------------
1 file changed, 9 insertions(+), 103 deletions(-)
diff --git a/server/named_pipe.c b/server/named_pipe.c
index 9c11e2e..6f5b3b0 100644
--- a/server/named_pipe.c
+++ b/server/named_pipe.c
@@ -24,21 +24,10 @@
#include "wine/port.h"
#include <assert.h>
-#include <fcntl.h>
#include <string.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#include <time.h>
-#include <unistd.h>
-#ifdef HAVE_POLL_H
-#include <poll.h>
-#endif
#include "ntstatus.h"
#define WIN32_NO_STATUS
@@ -91,7 +80,6 @@ struct pipe_server
enum pipe_state state; /* server state */
struct pipe_client *client; /* client that this server is connected to */
struct named_pipe *pipe;
- struct timeout_user *flush_poll;
unsigned int options; /* pipe options */
};
@@ -156,6 +144,7 @@ static const struct object_ops named_pipe_ops =
static enum server_fd_type pipe_end_get_fd_type( struct fd *fd );
static int pipe_end_read( struct fd *fd, struct async *async, file_pos_t pos );
static int pipe_end_write( struct fd *fd, struct async *async_data, file_pos_t pos );
+static int pipe_end_flush( struct fd *fd, struct async *async );
static void pipe_end_get_volume_info( struct fd *fd, unsigned int info_class );
static void pipe_end_queue_async( struct fd *fd, struct async *async, int type, int count );
static void pipe_end_reselect_async( struct fd *fd, struct async_queue *queue );
@@ -164,7 +153,6 @@ static void pipe_end_reselect_async( struct fd *fd, struct async_queue *queue );
static void pipe_server_dump( struct object *obj, int verbose );
static struct fd *pipe_server_get_fd( struct object *obj );
static void pipe_server_destroy( struct object *obj);
-static int pipe_server_flush( struct fd *fd, struct async *async );
static int pipe_server_ioctl( struct fd *fd, ioctl_code_t code, struct async *async );
static const struct object_ops pipe_server_ops =
@@ -196,7 +184,7 @@ static const struct fd_ops pipe_server_fd_ops =
pipe_end_get_fd_type, /* get_fd_type */
pipe_end_read, /* read */
pipe_end_write, /* write */
- pipe_server_flush, /* flush */
+ pipe_end_flush, /* flush */
pipe_end_get_volume_info, /* get_volume_info */
pipe_server_ioctl, /* ioctl */
pipe_end_queue_async, /* queue_async */
@@ -208,7 +196,6 @@ static void pipe_client_dump( struct object *obj, int verbose );
static int pipe_client_signaled( struct object *obj, struct wait_queue_entry *entry );
static struct fd *pipe_client_get_fd( struct object *obj );
static void pipe_client_destroy( struct object *obj );
-static int pipe_client_flush( struct fd *fd, struct async *async );
static int pipe_client_ioctl( struct fd *fd, ioctl_code_t code, struct async *async );
static const struct object_ops pipe_client_ops =
@@ -240,7 +227,7 @@ static const struct fd_ops pipe_client_fd_ops =
pipe_end_get_fd_type, /* get_fd_type */
pipe_end_read, /* read */
pipe_end_write, /* write */
- pipe_client_flush, /* flush */
+ pipe_end_flush, /* flush */
pipe_end_get_volume_info, /* get_volume_info */
pipe_client_ioctl, /* ioctl */
pipe_end_queue_async, /* queue_async */
@@ -384,16 +371,6 @@ static struct fd *pipe_server_get_fd( struct object *obj )
}
-static void notify_empty( struct pipe_server *server )
-{
- if (!server->flush_poll)
- return;
- assert( server->state == ps_connected_server );
- remove_timeout_user( server->flush_poll );
- server->flush_poll = NULL;
- fd_async_wake_up( server->pipe_end.fd, ASYNC_TYPE_WAIT, STATUS_SUCCESS );
-}
-
static void wake_message( struct pipe_message *message )
{
struct async *async = message->async;
@@ -458,8 +435,6 @@ static void do_disconnect( struct pipe_server *server )
}
}
assert( server->pipe_end.fd );
- if (!use_server_io( &server->pipe_end ))
- shutdown( get_unix_fd( server->pipe_end.fd ), SHUT_RDWR );
release_object( server->pipe_end.fd );
server->pipe_end.fd = NULL;
}
@@ -487,11 +462,7 @@ static void pipe_server_destroy( struct object *obj)
pipe_end_disconnect( &server->pipe_end, STATUS_PIPE_BROKEN );
- if (server->pipe_end.fd)
- {
- notify_empty( server );
- do_disconnect( server );
- }
+ if (server->pipe_end.fd) do_disconnect( server );
pipe_end_destroy( &server->pipe_end );
if (server->client)
@@ -519,8 +490,6 @@ static void pipe_client_destroy( struct object *obj)
if (server)
{
- notify_empty( server );
-
switch(server->state)
{
case ps_connected_server:
@@ -615,78 +584,18 @@ struct object *create_named_pipe_device( struct object *root, const struct unico
return &dev->obj;
}
-static int pipe_data_remaining( struct pipe_server *server )
-{
- struct pollfd pfd;
- int fd;
-
- assert( server->client );
-
- if (use_server_io( &server->pipe_end ))
- return !list_empty( &server->client->pipe_end.message_queue );
-
- fd = get_unix_fd( server->client->pipe_end.fd );
- if (fd < 0)
- return 0;
- pfd.fd = fd;
- pfd.events = POLLIN;
- pfd.revents = 0;
-
- if (0 > poll( &pfd, 1, 0 ))
- return 0;
-
- return pfd.revents&POLLIN;
-}
-
-static void check_flushed( void *arg )
+static int pipe_end_flush( struct fd *fd, struct async *async )
{
- struct pipe_server *server = (struct pipe_server*) arg;
+ struct pipe_end *pipe_end = get_fd_user( fd );
- if (pipe_data_remaining( server ))
- {
- server->flush_poll = add_timeout_user( -TICKS_PER_SEC / 10, check_flushed, server );
- }
- else
+ if (pipe_end->connection && !list_empty( &pipe_end->connection->message_queue ))
{
- server->flush_poll = NULL;
- fd_async_wake_up( server->pipe_end.fd, ASYNC_TYPE_WAIT, STATUS_SUCCESS );
+ fd_queue_async( pipe_end->fd, async, ASYNC_TYPE_WAIT );
+ set_error( STATUS_PENDING );
}
-}
-
-static int pipe_end_flush( struct pipe_end *pipe_end, struct async *async )
-{
- if (use_server_io( pipe_end ) && (!pipe_end->connection || list_empty( &pipe_end->connection->message_queue )))
- return 1;
-
- fd_queue_async( pipe_end->fd, async, ASYNC_TYPE_WAIT );
- set_error( STATUS_PENDING );
return 1;
}
-static int pipe_server_flush( struct fd *fd, struct async *async )
-{
- struct pipe_server *server = get_fd_user( fd );
- obj_handle_t handle;
-
- if (!server || server->state != ps_connected_server) return 1;
-
- if (!pipe_data_remaining( server )) return 1;
-
- handle = pipe_end_flush( &server->pipe_end, async );
-
- /* there's no unix way to be alerted when a pipe becomes empty, so resort to polling */
- if (handle && !use_server_io( &server->pipe_end ) && !server->flush_poll)
- server->flush_poll = add_timeout_user( -TICKS_PER_SEC / 10, check_flushed, server );
- return handle;
-}
-
-static int pipe_client_flush( struct fd *fd, struct async *async )
-{
- struct pipe_end *pipe_end = get_fd_user( fd );
- /* FIXME: Support byte mode. */
- return use_server_io( pipe_end ) ? pipe_end_flush( pipe_end, async ) : 1;
-}
-
static void pipe_end_get_volume_info( struct fd *fd, unsigned int info_class )
{
switch (info_class)
@@ -998,8 +907,6 @@ static int pipe_server_ioctl( struct fd *fd, ioctl_code_t code, struct async *as
assert( server->client );
assert( server->client->pipe_end.fd );
- notify_empty( server );
-
/* dump the client and server fds - client loses all waiting data */
pipe_end_disconnect( &server->pipe_end, STATUS_PIPE_DISCONNECTED );
do_disconnect( server );
@@ -1075,7 +982,6 @@ static struct pipe_server *create_pipe_server( struct named_pipe *pipe, unsigned
server->pipe = pipe;
server->client = NULL;
- server->flush_poll = NULL;
server->options = options;
init_pipe_end( &server->pipe_end, pipe_flags, pipe->insize );
More information about the wine-cvs
mailing list