OLE32: fix a few serious race conditions in the OLE object pipe server
Mike McCormack
mike at codeweavers.com
Wed Jul 14 14:24:21 CDT 2004
ChangeLog:
* fix a few serious race conditions in the OLE object pipe server
-------------- next part --------------
Index: dlls/ole32/compobj.c
===================================================================
RCS file: /home/wine/wine/dlls/ole32/compobj.c,v
retrieving revision 1.95
diff -u -r1.95 compobj.c
--- dlls/ole32/compobj.c 8 Jul 2004 20:16:23 -0000 1.95
+++ dlls/ole32/compobj.c 14 Jul 2004 19:21:34 -0000
@@ -1094,29 +1094,23 @@
}
IStream_Release(pStm);
+ hPipe = CreateNamedPipeA( pipefn, PIPE_ACCESS_DUPLEX,
+ PIPE_TYPE_BYTE|PIPE_WAIT, PIPE_UNLIMITED_INSTANCES,
+ 4096, 4096, NMPWAIT_USE_DEFAULT_WAIT, NULL );
+ if (hPipe == INVALID_HANDLE_VALUE) {
+ FIXME("pipe creation failed for %s, le is %lx\n",pipefn,GetLastError());
+ return 1;
+ }
while (1) {
- hPipe = CreateNamedPipeA(
- pipefn,
- PIPE_ACCESS_DUPLEX,
- PIPE_TYPE_BYTE|PIPE_WAIT,
- PIPE_UNLIMITED_INSTANCES,
- 4096,
- 4096,
- NMPWAIT_USE_DEFAULT_WAIT,
- NULL
- );
- if (hPipe == INVALID_HANDLE_VALUE) {
- FIXME("pipe creation failed for %s, le is %lx\n",pipefn,GetLastError());
- return 1;
- }
- if (!ConnectNamedPipe(hPipe,NULL)) {
- ERR("Failure during ConnectNamedPipe %lx, ABORT!\n",GetLastError());
- CloseHandle(hPipe);
- continue;
- }
- WriteFile(hPipe,buffer,buflen,&res,NULL);
- CloseHandle(hPipe);
+ if (!ConnectNamedPipe(hPipe,NULL)) {
+ ERR("Failure during ConnectNamedPipe %lx, ABORT!\n",GetLastError());
+ break;
+ }
+ WriteFile(hPipe,buffer,buflen,&res,NULL);
+ FlushFileBuffers(hPipe);
+ DisconnectNamedPipe(hPipe);
}
+ CloseHandle(hPipe);
return 0;
}
Index: dlls/ole32/rpc.c
===================================================================
RCS file: /home/wine/wine/dlls/ole32/rpc.c,v
retrieving revision 1.14
diff -u -r1.14 rpc.c
--- dlls/ole32/rpc.c 23 Jan 2004 01:51:34 -0000 1.14
+++ dlls/ole32/rpc.c 14 Jul 2004 19:21:34 -0000
@@ -512,6 +512,7 @@
WINE_StringFromCLSID(rclsid,pipefn+strlen(PIPEPREF));
while (tries++<MAXTRIES) {
+ WaitNamedPipeA( pipefn, NMPWAIT_WAIT_FOREVER );
hPipe = CreateFileA(
pipefn,
GENERIC_READ|GENERIC_WRITE,
More information about the wine-patches
mailing list