• Vladislav Vaintroub's avatar
    Bug#37226 Explicit call of my_thread_init() on Windows for every new thread. · 927a0303
    Vladislav Vaintroub authored
    Bug#33031 app linked to libmysql.lib crash if run as service in vista under 
    localsystem
      
    
    There are some problems using DllMain hook functions on Windows that 
    automatically do global and per-thread initialization for libmysqld.dll
    
    1)per-thread initialization(DLL_THREAD_ATTACH)
    MySQL internally counts number of active threads that and causes a delay in in 
    my_end() if not all threads are exited. But,there are threads that can be 
    started either by Windows internally (often in TCP/IP scenarios) or by user 
    himself - those threads are not necessarily using libmysql.dll functionality, 
    but nonetheless the contribute to the count of open threads.
    
    2)process-initialization (DLL_PROCESS_ATTACH)
    my_init() calls WSAStartup that itself loads DLLs and can lead to a deadlock in 
    Windows loader.
    
    Fix is to remove dll initialization code from libmysql.dll in general case. I
    still leave an environment variable LIBMYSQL_DLLINIT, which if set to any value 
    will cause the old behavior (DLL init hooks will be called). This env.variable 
    exists only to prevent breakage of existing Windows-only applications that 
    don't do mysql_thread_init() and work ok today. Use of LIBMYSQL_DLLINIT is 
    discouraged and it will be removed in 6.0
    927a0303
dll.c 3.4 KB