diff options
| author | Mike Pall <mike> | 2011-11-27 11:45:55 +0100 |
|---|---|---|
| committer | Mike Pall <mike> | 2011-11-27 11:45:55 +0100 |
| commit | 0a31c6373cbedce3c1d97d22e1db47755f834aba (patch) | |
| tree | 7b0c10e1bb5a074f1e8d08ec528302e077c986de | |
| parent | e3c7476533c892ab1ac24dea45efb4204b15c577 (diff) | |
| download | luajit-0a31c6373cbedce3c1d97d22e1db47755f834aba.tar.gz luajit-0a31c6373cbedce3c1d97d22e1db47755f834aba.tar.bz2 luajit-0a31c6373cbedce3c1d97d22e1db47755f834aba.zip | |
Don't increment module reference counts due to symbol resolving.
| -rw-r--r-- | src/lib_package.c | 3 | ||||
| -rw-r--r-- | src/lj_clib.c | 7 |
2 files changed, 6 insertions, 4 deletions
diff --git a/src/lib_package.c b/src/lib_package.c index 3ee9f77a..a13c45ba 100644 --- a/src/lib_package.c +++ b/src/lib_package.c | |||
| @@ -75,6 +75,7 @@ static const char *ll_bcsym(void *lib, const char *sym) | |||
| 75 | 75 | ||
| 76 | #ifndef GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | 76 | #ifndef GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS |
| 77 | #define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 4 | 77 | #define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 4 |
| 78 | #define GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT 2 | ||
| 78 | BOOL WINAPI GetModuleHandleExA(DWORD, LPCSTR, HMODULE*); | 79 | BOOL WINAPI GetModuleHandleExA(DWORD, LPCSTR, HMODULE*); |
| 79 | #endif | 80 | #endif |
| 80 | 81 | ||
| @@ -132,7 +133,7 @@ static const char *ll_bcsym(void *lib, const char *sym) | |||
| 132 | } else { | 133 | } else { |
| 133 | HINSTANCE h = GetModuleHandleA(NULL); | 134 | HINSTANCE h = GetModuleHandleA(NULL); |
| 134 | const char *p = (const char *)GetProcAddress(h, sym); | 135 | const char *p = (const char *)GetProcAddress(h, sym); |
| 135 | if (p == NULL && GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, | 136 | if (p == NULL && GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS|GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, |
| 136 | (const char *)ll_bcsym, &h)) | 137 | (const char *)ll_bcsym, &h)) |
| 137 | p = (const char *)GetProcAddress(h, sym); | 138 | p = (const char *)GetProcAddress(h, sym); |
| 138 | return p; | 139 | return p; |
diff --git a/src/lj_clib.c b/src/lj_clib.c index ff71346a..68398cf5 100644 --- a/src/lj_clib.c +++ b/src/lj_clib.c | |||
| @@ -134,6 +134,7 @@ static void *clib_getsym(CLibrary *cl, const char *name) | |||
| 134 | 134 | ||
| 135 | #ifndef GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | 135 | #ifndef GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS |
| 136 | #define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 4 | 136 | #define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 4 |
| 137 | #define GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT 2 | ||
| 137 | BOOL WINAPI GetModuleHandleExA(DWORD, LPCSTR, HMODULE*); | 138 | BOOL WINAPI GetModuleHandleExA(DWORD, LPCSTR, HMODULE*); |
| 138 | #endif | 139 | #endif |
| 139 | 140 | ||
| @@ -217,13 +218,13 @@ static void *clib_getsym(CLibrary *cl, const char *name) | |||
| 217 | HINSTANCE h = (HINSTANCE)clib_def_handle[i]; | 218 | HINSTANCE h = (HINSTANCE)clib_def_handle[i]; |
| 218 | if (!(void *)h) { /* Resolve default library handles (once). */ | 219 | if (!(void *)h) { /* Resolve default library handles (once). */ |
| 219 | switch (i) { | 220 | switch (i) { |
| 220 | case CLIB_HANDLE_EXE: GetModuleHandleExA(0, NULL, &h); break; | 221 | case CLIB_HANDLE_EXE: GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, NULL, &h); break; |
| 221 | case CLIB_HANDLE_DLL: | 222 | case CLIB_HANDLE_DLL: |
| 222 | GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, | 223 | GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS|GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, |
| 223 | (const char *)clib_def_handle, &h); | 224 | (const char *)clib_def_handle, &h); |
| 224 | break; | 225 | break; |
| 225 | case CLIB_HANDLE_CRT: | 226 | case CLIB_HANDLE_CRT: |
| 226 | GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, | 227 | GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS|GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, |
| 227 | (const char *)&_fmode, &h); | 228 | (const char *)&_fmode, &h); |
| 228 | break; | 229 | break; |
| 229 | case CLIB_HANDLE_KERNEL32: h = LoadLibraryA("kernel32.dll"); break; | 230 | case CLIB_HANDLE_KERNEL32: h = LoadLibraryA("kernel32.dll"); break; |
