Jacek Caban : rpcrt4: Introduce op for closing connection read end and use it when shutting down server.

Alexandre Julliard julliard at winehq.org
Wed May 24 17:17:33 CDT 2017


Module: wine
Branch: master
Commit: 42ba4d731abf24ba0653c5a9f709de18ab33b82a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=42ba4d731abf24ba0653c5a9f709de18ab33b82a

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed May 24 13:52:07 2017 +0200

rpcrt4: Introduce op for closing connection read end and use it when shutting down server.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/rpcrt4/rpc_binding.h   |  6 ++++++
 dlls/rpcrt4/rpc_server.c    |  3 +++
 dlls/rpcrt4/rpc_transport.c | 19 +++++++++++++++++++
 3 files changed, 28 insertions(+)

diff --git a/dlls/rpcrt4/rpc_binding.h b/dlls/rpcrt4/rpc_binding.h
index ff14bbd..affc060 100644
--- a/dlls/rpcrt4/rpc_binding.h
+++ b/dlls/rpcrt4/rpc_binding.h
@@ -104,6 +104,7 @@ struct connection_ops {
   int (*read)(RpcConnection *conn, void *buffer, unsigned int len);
   int (*write)(RpcConnection *conn, const void *buffer, unsigned int len);
   int (*close)(RpcConnection *conn);
+  void (*close_read)(RpcConnection *conn);
   void (*cancel_call)(RpcConnection *conn);
   RPC_STATUS (*is_server_listening)(const char *endpoint);
   int (*wait_for_incoming_data)(RpcConnection *conn);
@@ -197,6 +198,11 @@ static inline int rpcrt4_conn_close(RpcConnection *Connection)
   return Connection->ops->close(Connection);
 }
 
+static inline void rpcrt4_conn_close_read(RpcConnection *connection)
+{
+  connection->ops->close_read(connection);
+}
+
 static inline void rpcrt4_conn_cancel_call(RpcConnection *Connection)
 {
   Connection->ops->cancel_call(Connection);
diff --git a/dlls/rpcrt4/rpc_server.c b/dlls/rpcrt4/rpc_server.c
index b76185b..901801e 100644
--- a/dlls/rpcrt4/rpc_server.c
+++ b/dlls/rpcrt4/rpc_server.c
@@ -669,9 +669,12 @@ static DWORD CALLBACK RPCRT4_server_thread(LPVOID the_arg)
     {
       /* cleanup */
       cps->ops->free_wait_array(cps, objs);
+
       EnterCriticalSection(&cps->cs);
       LIST_FOR_EACH_ENTRY(conn, &cps->listeners, RpcConnection, protseq_entry)
         RPCRT4_CloseConnection(conn);
+      LIST_FOR_EACH_ENTRY(conn, &cps->connections, RpcConnection, protseq_entry)
+        rpcrt4_conn_close_read(conn);
       LeaveCriticalSection(&cps->cs);
 
       if (res == 0 && !std_listen)
diff --git a/dlls/rpcrt4/rpc_transport.c b/dlls/rpcrt4/rpc_transport.c
index b88eeb7..6f83a24 100644
--- a/dlls/rpcrt4/rpc_transport.c
+++ b/dlls/rpcrt4/rpc_transport.c
@@ -449,6 +449,11 @@ static int rpcrt4_conn_np_close(RpcConnection *conn)
     return 0;
 }
 
+static void rpcrt4_conn_np_close_read(RpcConnection *conn)
+{
+    /* FIXME */
+}
+
 static void rpcrt4_conn_np_cancel_call(RpcConnection *conn)
 {
     RpcConnection_np *connection = (RpcConnection_np *)conn;
@@ -1441,6 +1446,11 @@ static int rpcrt4_conn_tcp_close(RpcConnection *conn)
     return 0;
 }
 
+static void rpcrt4_conn_tcp_close_read(RpcConnection *conn)
+{
+    /* FIXME */
+}
+
 static void rpcrt4_conn_tcp_cancel_call(RpcConnection *conn)
 {
     RpcConnection_tcp *connection = (RpcConnection_tcp *) conn;
@@ -3066,6 +3076,11 @@ static int rpcrt4_ncacn_http_close(RpcConnection *Connection)
   return 0;
 }
 
+static void rpcrt4_ncacn_http_close_read(RpcConnection *conn)
+{
+    rpcrt4_ncacn_http_close(conn); /* FIXME */
+}
+
 static void rpcrt4_ncacn_http_cancel_call(RpcConnection *Connection)
 {
   RpcConnection_http *httpc = (RpcConnection_http *) Connection;
@@ -3119,6 +3134,7 @@ static const struct connection_ops conn_protseq_list[] = {
     rpcrt4_conn_np_read,
     rpcrt4_conn_np_write,
     rpcrt4_conn_np_close,
+    rpcrt4_conn_np_close_read,
     rpcrt4_conn_np_cancel_call,
     rpcrt4_ncacn_np_is_server_listening,
     rpcrt4_conn_np_wait_for_incoming_data,
@@ -3140,6 +3156,7 @@ static const struct connection_ops conn_protseq_list[] = {
     rpcrt4_conn_np_read,
     rpcrt4_conn_np_write,
     rpcrt4_conn_np_close,
+    rpcrt4_conn_np_close_read,
     rpcrt4_conn_np_cancel_call,
     rpcrt4_ncalrpc_np_is_server_listening,
     rpcrt4_conn_np_wait_for_incoming_data,
@@ -3161,6 +3178,7 @@ static const struct connection_ops conn_protseq_list[] = {
     rpcrt4_conn_tcp_read,
     rpcrt4_conn_tcp_write,
     rpcrt4_conn_tcp_close,
+    rpcrt4_conn_tcp_close_read,
     rpcrt4_conn_tcp_cancel_call,
     rpcrt4_conn_tcp_is_server_listening,
     rpcrt4_conn_tcp_wait_for_incoming_data,
@@ -3182,6 +3200,7 @@ static const struct connection_ops conn_protseq_list[] = {
     rpcrt4_ncacn_http_read,
     rpcrt4_ncacn_http_write,
     rpcrt4_ncacn_http_close,
+    rpcrt4_ncacn_http_close_read,
     rpcrt4_ncacn_http_cancel_call,
     rpcrt4_ncacn_http_is_server_listening,
     rpcrt4_ncacn_http_wait_for_incoming_data,




More information about the wine-cvs mailing list