In psqlsetup, call both FreeLibrary() and __FUnloadDelayLoadedDLL2() for psqlodbc35w...
authorHiroshi Inoue <h-inoue@dream.email.ne.jp>
Wed, 23 Nov 2016 22:38:52 +0000 (07:38 +0900)
committerHiroshi Inoue <h-inoue@dream.email.ne.jp>
Wed, 23 Nov 2016 22:43:39 +0000 (07:43 +0900)
loadlib.c
loadlib.h
msdtc_enlist.cpp
psqlsetup.c

index b53f268dde4249dcd49d9f2781d08bfb2dbea557..223b424e392be625c4b9469daf5132c64ea797d9 100644 (file)
--- a/loadlib.c
+++ b/loadlib.c
@@ -157,6 +157,11 @@ DliErrorHook(unsigned  dliNotify,
    return (FARPROC) hmodule;
 }
 
+void AlreadyLoadedPsqlodbc(void)
+{
+   loaded_psqlodbc = TRUE;
+}
+
 /*
  * unload delay loaded libraries.
  */
@@ -173,16 +178,13 @@ void CleanupDelayLoadedDLLs(void)
    /* The dll names are case sensitive for the unload helper */
    if (loaded_pgenlist)
    {
-       if (enlist_module == NULL)
-       {
-           success = (*func)(pgenlistdll);
-           mylog("%s unload success=%d\n", pgenlistdll, success);
-       }
-       else
+       if (enlist_module != NULL)
        {
            FreeLibrary(enlist_module);
            mylog("FreeLibrary %s\n", pgenlistdll);
        }
+       success = (*func)(pgenlistdll);
+       mylog("%s unload success=%d\n", pgenlistdll, success);
        loaded_pgenlist = FALSE;
    }
    if (loaded_psqlodbc)
index f0d630230d171c13bdc90b20d72ff5dc9c0a6afd..fb97055fa33e59381c05b7bed89dca801cf8cd16 100644 (file)
--- a/loadlib.h
+++ b/loadlib.h
@@ -33,6 +33,7 @@ void  CALL_ReleaseTransactionObject(void *);
 /* void    UnloadDelayLoadedDLLs(BOOL); */
 void   CleanupDelayLoadedDLLs(void);
 HMODULE MODULE_load_from_psqlodbc_path(const char *module_name);
+void   AlreadyLoadedPsqlodbc(void);
 
 #ifdef __cplusplus
 }
index 01c790d21cab175b00652f48b83013da088d26d6..248ec624d30ff258026d0e890e02b5205ad9ba9b 100755 (executable)
@@ -61,6 +61,9 @@ DllMain(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved)
                 case DLL_PROCESS_ATTACH:
                         s_hModule = (HINSTANCE) hInst;  /* Save for dialog boxes */
            break;
+                case DLL_PROCESS_DETACH:
+                        mylog("DETACHING pgenlist\n");
+           break;
    }
    return TRUE;
 }
index 35ebb5644d93b2e07940a42a540ab0e323e816ab..7bba4308211a34fc93cfd9355528abd52bc5ce99 100644 (file)
@@ -107,6 +107,8 @@ DllMain(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved)
                MessageBox(NULL, "psqlodbc load error", "psqlsetup",  MB_OK);
                return TRUE;
            }
+           else
+               AlreadyLoadedPsqlodbc();
            break;
 
        case DLL_THREAD_ATTACH: