aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2011-11-27 11:45:55 +0100
committerMike Pall <mike>2011-11-27 11:45:55 +0100
commit0a31c6373cbedce3c1d97d22e1db47755f834aba (patch)
tree7b0c10e1bb5a074f1e8d08ec528302e077c986de
parente3c7476533c892ab1ac24dea45efb4204b15c577 (diff)
downloadluajit-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.c3
-rw-r--r--src/lj_clib.c7
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
78BOOL WINAPI GetModuleHandleExA(DWORD, LPCSTR, HMODULE*); 79BOOL 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
137BOOL WINAPI GetModuleHandleExA(DWORD, LPCSTR, HMODULE*); 138BOOL 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;