Don't increment module reference counts due to symbol resolving.

This commit is contained in:
Mike Pall 2011-11-27 11:45:55 +01:00
parent e3c7476533
commit 0a31c6373c
2 changed files with 6 additions and 4 deletions

View File

@ -75,6 +75,7 @@ static const char *ll_bcsym(void *lib, const char *sym)
#ifndef GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS #ifndef GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS
#define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 4 #define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 4
#define GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT 2
BOOL WINAPI GetModuleHandleExA(DWORD, LPCSTR, HMODULE*); BOOL WINAPI GetModuleHandleExA(DWORD, LPCSTR, HMODULE*);
#endif #endif
@ -132,7 +133,7 @@ static const char *ll_bcsym(void *lib, const char *sym)
} else { } else {
HINSTANCE h = GetModuleHandleA(NULL); HINSTANCE h = GetModuleHandleA(NULL);
const char *p = (const char *)GetProcAddress(h, sym); const char *p = (const char *)GetProcAddress(h, sym);
if (p == NULL && GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, if (p == NULL && GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS|GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
(const char *)ll_bcsym, &h)) (const char *)ll_bcsym, &h))
p = (const char *)GetProcAddress(h, sym); p = (const char *)GetProcAddress(h, sym);
return p; return p;

View File

@ -134,6 +134,7 @@ static void *clib_getsym(CLibrary *cl, const char *name)
#ifndef GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS #ifndef GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS
#define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 4 #define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 4
#define GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT 2
BOOL WINAPI GetModuleHandleExA(DWORD, LPCSTR, HMODULE*); BOOL WINAPI GetModuleHandleExA(DWORD, LPCSTR, HMODULE*);
#endif #endif
@ -217,13 +218,13 @@ static void *clib_getsym(CLibrary *cl, const char *name)
HINSTANCE h = (HINSTANCE)clib_def_handle[i]; HINSTANCE h = (HINSTANCE)clib_def_handle[i];
if (!(void *)h) { /* Resolve default library handles (once). */ if (!(void *)h) { /* Resolve default library handles (once). */
switch (i) { switch (i) {
case CLIB_HANDLE_EXE: GetModuleHandleExA(0, NULL, &h); break; case CLIB_HANDLE_EXE: GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, NULL, &h); break;
case CLIB_HANDLE_DLL: case CLIB_HANDLE_DLL:
GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS|GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
(const char *)clib_def_handle, &h); (const char *)clib_def_handle, &h);
break; break;
case CLIB_HANDLE_CRT: case CLIB_HANDLE_CRT:
GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS|GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
(const char *)&_fmode, &h); (const char *)&_fmode, &h);
break; break;
case CLIB_HANDLE_KERNEL32: h = LoadLibraryA("kernel32.dll"); break; case CLIB_HANDLE_KERNEL32: h = LoadLibraryA("kernel32.dll"); break;