Re: Shell32: Reimplement SHGetFolder functions
Juan Lang <juan_lang(a)yahoo.com> writes:
+static void loadShell32(void) +{ + if (hShell32) + { + if (pMalloc) + { + pMalloc->lpVtbl->Release(pMalloc); + pMalloc = NULL; + } + /* until it's really unloaded: */ + while (FreeLibrary(hShell32)) + ;
I'm not sure what you are trying to do here, but this causes an infinite loop on XP (and it probably should under Wine too, since the test binary imports shell32). Also some tests fail on XP: shellpath.c:433: Test failed: SHGetFolderPath returned 0x00000000, expected 0x80070002 shellpath.c:438: Test failed: SHGetFolderLocation returned 0x00000000, expected E_FAIL shellpath.c:442: Test failed: SHGetSpecialFolderPath succeeded, expected failure shellpath.c:447: Test failed: SHGetFolderLocation returned 0x00000000, expected E_FAIL -- Alexandre Julliard julliard(a)winehq.org
--- Alexandre Julliard <julliard(a)winehq.org> wrote:
+static void loadShell32(void) +{ + if (hShell32) + { + if (pMalloc) + { + pMalloc->lpVtbl->Release(pMalloc); + pMalloc = NULL; + } + /* until it's really unloaded: */ + while (FreeLibrary(hShell32)) + ;
I'm not sure what you are trying to do here, but this causes an infinite loop on XP (and it probably should under Wine too, since the test binary imports shell32).
Really? Odd, I first wrote this under XP. I'm trying to force shell32 to unload; native shell32 caches values you've already queried and won't reinitialize them till you reload it. But thanks, I'll test some more. --Juan _______________________________ Do you Yahoo!? Declare Yourself - Register online to vote today! http://vote.yahoo.com
--- Alexandre Julliard <julliard(a)winehq.org> wrote:
+static void loadShell32(void) +{ + if (hShell32) + { + if (pMalloc) + { + pMalloc->lpVtbl->Release(pMalloc); + pMalloc = NULL; + } + /* until it's really unloaded: */ + while (FreeLibrary(hShell32)) + ;
I'm not sure what you are trying to do here, but this causes an infinite loop on XP (and it probably should under Wine too, since the test binary imports shell32).
I'm unable to reproduce the infinite loop under XP. As far as I can tell this shouldn't produce one, either: since I don't modify the value of hShell32, FreeLibrary should eventually fail when the refcount on the library reaches 0 and the library is actually unloaded. There are other problems in WinXP that I'm working on (ILFindLastID doesn't appear to be exported by name, for example). If you're sure an infinite loop is the symptom, though, I'll resubmit without this test. (Pity, it was probably the most interesting test.) --Juan __________________________________ Do you Yahoo!? Yahoo! Mail Address AutoComplete - You start. We finish. http://promotions.yahoo.com/new_mail
Juan Lang <juan_lang(a)yahoo.com> writes:
I'm unable to reproduce the infinite loop under XP. As far as I can tell this shouldn't produce one, either: since I don't modify the value of hShell32, FreeLibrary should eventually fail when the refcount on the library reaches 0 and the library is actually unloaded.
There is no guarantee of that, there are many cases where a dll cannot be unloaded, for instance if it contains TLS data. You'll need to spawn a child process if you want to reliably test the shell32 init code. -- Alexandre Julliard julliard(a)winehq.org
participants (2)
-
Alexandre Julliard -
Juan Lang