rpc patch 2

Ove Kaaven ovek at arcticnet.no
Thu Jan 8 08:56:38 CST 2004


Log:
Ove Kaaven <ovek at transgaming.com>
Avoid freeing request packet too early if an exception occurs.

Index: rpc_server.c
===================================================================
RCS file: /home/wine/wine/dlls/rpcrt4/rpc_server.c,v
retrieving revision 1.24
diff -u -r1.24 rpc_server.c
--- rpc_server.c	27 Nov 2003 00:59:36 -0000	1.24
+++ rpc_server.c	8 Jan 2004 14:45:35 -0000
@@ -178,11 +178,18 @@
   return packet;
 }
 
+typedef struct {
+  PRPC_MESSAGE msg;
+  void* buf;
+} packet_state;
+
 static WINE_EXCEPTION_FILTER(rpc_filter)
 {
+  packet_state* state;
   PRPC_MESSAGE msg;
-  msg = TlsGetValue(worker_tls);
-  I_RpcFreeBuffer(msg);
+  state = TlsGetValue(worker_tls);
+  msg = state->msg;
+  if (msg->Buffer != state->buf) I_RpcFreeBuffer(msg);
   msg->RpcFlags |= WINE_RPCFLAG_EXCEPTION;
   msg->BufferLength = sizeof(DWORD);
   I_RpcGetBuffer(msg);
@@ -196,8 +203,11 @@
   RPC_MESSAGE msg;
   RpcServerInterface* sif;
   RPC_DISPATCH_FUNCTION func;
+  packet_state state;
 
-  TlsSetValue(worker_tls, &msg);
+  state.msg = &msg;
+  state.buf = buf;
+  TlsSetValue(worker_tls, &state);
   memset(&msg, 0, sizeof(msg));
   msg.BufferLength = hdr->len;
   msg.Buffer = buf;





More information about the wine-patches mailing list