]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
Don't increment module reference counts due to symbol resolving.
authorMike Pall <mike>
Sun, 27 Nov 2011 10:45:55 +0000 (11:45 +0100)
committerMike Pall <mike>
Sun, 27 Nov 2011 10:45:55 +0000 (11:45 +0100)
src/lib_package.c
src/lj_clib.c

index 3ee9f77a19a0b81008e7ee2e8114a7f9407e03fe..a13c45baf7c4df312e230828c106334558394644 100644 (file)
@@ -75,6 +75,7 @@ static const char *ll_bcsym(void *lib, const char *sym)
 
 #ifndef GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS
 #define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS  4
+#define GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT  2
 BOOL WINAPI GetModuleHandleExA(DWORD, LPCSTR, HMODULE*);
 #endif
 
@@ -132,7 +133,7 @@ static const char *ll_bcsym(void *lib, const char *sym)
   } else {
     HINSTANCE h = GetModuleHandleA(NULL);
     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))
       p = (const char *)GetProcAddress(h, sym);
     return p;
index ff71346a0b6fdcc97b57ae5afcf1f868fe09057e..68398cf5f6bad5f59c26b010c8a8a49d57e9fb00 100644 (file)
@@ -134,6 +134,7 @@ static void *clib_getsym(CLibrary *cl, const char *name)
 
 #ifndef GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS
 #define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 4
+#define GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT   2
 BOOL WINAPI GetModuleHandleExA(DWORD, LPCSTR, HMODULE*);
 #endif
 
@@ -217,13 +218,13 @@ static void *clib_getsym(CLibrary *cl, const char *name)
       HINSTANCE h = (HINSTANCE)clib_def_handle[i];
       if (!(void *)h) {  /* Resolve default library handles (once). */
        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:
-         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);
          break;
        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);
          break;
        case CLIB_HANDLE_KERNEL32: h = LoadLibraryA("kernel32.dll"); break;