Fix a few serious race conditions in the OLE object pipe server.

This commit is contained in:
Mike McCormack 2004-07-15 22:07:44 +00:00 committed by Alexandre Julliard
parent 9f58ee709d
commit e42d8aef24
2 changed files with 17 additions and 22 deletions

View File

@ -1094,29 +1094,23 @@ _LocalServerThread(LPVOID param) {
} }
IStream_Release(pStm); IStream_Release(pStm);
while (1) { hPipe = CreateNamedPipeA( pipefn, PIPE_ACCESS_DUPLEX,
hPipe = CreateNamedPipeA( PIPE_TYPE_BYTE|PIPE_WAIT, PIPE_UNLIMITED_INSTANCES,
pipefn, 4096, 4096, NMPWAIT_USE_DEFAULT_WAIT, NULL );
PIPE_ACCESS_DUPLEX, if (hPipe == INVALID_HANDLE_VALUE) {
PIPE_TYPE_BYTE|PIPE_WAIT, FIXME("pipe creation failed for %s, le is %lx\n",pipefn,GetLastError());
PIPE_UNLIMITED_INSTANCES, return 1;
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);
} }
while (1) {
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; return 0;
} }

View File

@ -512,6 +512,7 @@ HRESULT create_marshalled_proxy(REFCLSID rclsid, REFIID iid, LPVOID *ppv) {
WINE_StringFromCLSID(rclsid,pipefn+strlen(PIPEPREF)); WINE_StringFromCLSID(rclsid,pipefn+strlen(PIPEPREF));
while (tries++<MAXTRIES) { while (tries++<MAXTRIES) {
WaitNamedPipeA( pipefn, NMPWAIT_WAIT_FOREVER );
hPipe = CreateFileA( hPipe = CreateFileA(
pipefn, pipefn,
GENERIC_READ|GENERIC_WRITE, GENERIC_READ|GENERIC_WRITE,