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