http://bugs.winehq.org/show_bug.cgi?id=7448
------- Additional Comments From truiken@gmail.com 2007-19-02 22:00 -------
LONG SHDOCVW_refCount = 0;
HRESULT WINAPI DllCanUnloadNow(void) { return SHDOCVW_refCount ? S_FALSE : S_OK; }
--- snip ---
One can say it's not implemented usefully at all (a reference count should be
used [sic!]).
This leads to dangerous behaviour.
Your analysis is wrong:
wine/dlls/shdocvw ]$ grep SHDOCVW_refCount * shdocvw.h:extern LONG SHDOCVW_refCount; shdocvw.h:static inline void SHDOCVW_LockModule(void) { InterlockedIncrement( &SHDOCVW_refCount ); } shdocvw.h:static inline void SHDOCVW_UnlockModule(void) { InterlockedDecrement( &SHDOCVW_refCount ); } shdocvw_main.c:LONG SHDOCVW_refCount = 0; shdocvw_main.c: return SHDOCVW_refCount ? S_FALSE : S_OK;
wine/dlls/shdocvw ]$ grep SHDOCVW_LockModule * factory.c: SHDOCVW_LockModule(); factory.c: SHDOCVW_LockModule(); shdocvw.h:static inline void SHDOCVW_LockModule(void) { InterlockedIncrement( &SHDOCVW_refCount ); } shlinstobj.c: SHDOCVW_LockModule(); shlinstobj.c: SHDOCVW_LockModule(); webbrowser.c: SHDOCVW_LockModule();