1
0
mirror of https://github.com/mariadb-corporation/mariadb-connector-c.git synced 2025-08-08 14:02:17 +03:00

thread safe libray initialization

This commit is contained in:
Vladislav Vaintroub
2016-04-09 17:01:03 +02:00
parent a57406cb3b
commit 72a314295b

View File

@@ -3421,15 +3421,8 @@ const char * STDCALL mysql_sqlstate(MYSQL *mysql)
return mysql->net.sqlstate;
}
int STDCALL mysql_server_init(int argc __attribute__((unused)),
char **argv __attribute__((unused)),
char **groups __attribute__((unused)))
static int mysql_once_init()
{
int rc= 0;
if (!mysql_client_init)
{
mysql_client_init=1;
ma_init(); /* Will init threads */
init_client_errs();
if (mysql_client_plugin_init())
@@ -3457,14 +3450,35 @@ int STDCALL mysql_server_init(int argc __attribute__((unused)),
(env = getenv("MARIADB_UNIX_PORT")))
mysql_unix_port = env;
}
}
#ifdef THREAD
else
rc= mysql_thread_init();
#endif
if (!mysql_ps_subsystem_initialized)
mysql_init_ps_subsystem();
return(rc);
mysql_client_init = 1;
return 0;
}
#ifdef _WIN32
BOOL CALLBACK win_init_once(
PINIT_ONCE InitOnce,
PVOID Parameter,
PVOID *lpContext)
{
return !mysql_once_init();
return TRUE;
}
#endif
int STDCALL mysql_server_init(int argc __attribute__((unused)),
char **argv __attribute__((unused)),
char **groups __attribute__((unused)))
{
#ifdef _WIN32
static INIT_ONCE init_once = INIT_ONCE_STATIC_INIT;
BOOL ret = InitOnceExecuteOnce(&init_once, win_init_once, NULL, NULL);
return ret? 0: 1;
#else
static pthread_once_t init_once = PTHREAD_ONCE_INIT;
return pthread_once(&init_once, mysql_once_init);
#endif
}
void STDCALL mysql_server_end(void)