Gregory M. Turner wrote:
On Monday 17 February 2003 08:26 pm, Dan Kegel wrote:
The simple sequence CreateNamedPipe CreateFile seems to work under Windows, but not under Wine. Does Wine for some reason require a ConnectNamedPipe between the two? ...
nice catch!
This explains some things I've been noticing lately ;) There have been race-conditions in RPC lately, my uncomitted "rpc testcase" patch exposes them. Maybe you've found code (or hardware?) to consistently expose the losing side of the race? Wish I had a dualie for stuff like this ;)
No need for a dual processor to magnify this bug! Just apply the attached patch, and I bet you'll get the race to trigger every time you do an installshield install. It shows up as the dialog box "Object not registered". BTW I'm slowly adding to tests/pipe.c; I need to exercise a few more calls, then it'll be a handy little unit test for anyone fixing up the named pipe support. (Just don't forget to remove the todo_wine in the test, else it won't actually test anything.) - Dan -- Dan Kegel http://www.kegel.com http://counter.li.org/cgi-bin/runscript/display-person.cgi?user=78045 Index: dlls/ole32/rpc.c =================================================================== RCS file: /home/wine/wine/dlls/ole32/rpc.c,v retrieving revision 1.10 diff -u -p -d -u -r1.10 rpc.c --- dlls/ole32/rpc.c 14 Feb 2003 23:30:50 -0000 1.10 +++ dlls/ole32/rpc.c 22 Feb 2003 05:11:21 -0000 @@ -669,6 +669,10 @@ _StubMgrThread(LPVOID param) { FIXME("pipe creation failed for %s, le is %lx\n",pipefn,GetLastError()); return 1; /* permanent failure, so quit stubmgr thread */ } +#if 1 + /* widen the window for the race condition */ + Sleep(50); +#endif if (!ConnectNamedPipe(listenPipe,NULL)) { ERR("Failure during ConnectNamedPipe %lx!\n",GetLastError()); CloseHandle(listenPipe);