I finally tracked down the regression in the MSVC 4.0 installer to one patch:
http://www.winehq.com/hypermail/wine-cvs/2002/08/0166.html ------ Modified files: dlls/winmm/wineoss: audio.c
Log message: Ove Kaaven ovek@transgaming.com Tweaks to improve playback performance and reduce sound glitches: - wodGetPosition does not send an update message to the player thread; this reduces the accuracy of the readout from byte-accuracy to near fragment-accuracy, but we save 2-4 context switches and kernel scheduling penalties. - if FeedDSP runs out of data, do not flush output buffers before notifications are sent and given the chance to provide more sound data. Do not flush before we're down to the last fragment. - messages to the player thread are signaled using Unix pipes instead of Win32 synchronization primitives, to avoid having the player thread wait for the wineserver (and context switches from/to it) before the it can feed more data to the sound card. - ring buffer size is increased from 30 to 192 to support some games that fires 128 messages at once to determine DMA buffer size. ------
Before this patch, clicking on "Exit" in MSVC 4.0 installer worked. After this patch, it hangs.
Baseline: inserting disc 1 of MSVC4.0 into drive and mounting it cvs update -D "2002-08-26 17:49 EDT" ./configure make depend && make ./wine d:setup.exe click on exit it terminates normally
Error case:
cvs update -D "2002-08-26 17:50 EDT" ./configure comment out #ifdef HAVE_SYS_POLL in dlls/winmm/wineoss/audio.c so it compiles comment out #define USE_PIPE_SYNC in dlls/winmm/wineoss/audio.c to get closer to old behavior make depend && make ./wine --debugmsg +event,+relay,+wave d:setup.exe > /tmp/bad.log 2>&1 click on exit it hangs, must kill with SIGINT
Log in http://www.kegel.com/msvc4-setup-wine-20020826-17:50.bad.log.bz2
Problem occurred whether or not I commented out #define USE_PIPE_SYNC
I'd be happy to provide more info. FWIW I'm running Red Hat 8.0. - Dan