# Fix created by Stephane Carrez, little modification by Lukas Javorsky # https://bugs.mysql.com/bug.php?id=66740 # Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1689827 --- mariadb-5.5.65/mysys/my_thr_init.c.memleak 2019-08-08 11:40:51.223474780 +0200 +++ mariadb-5.5.65/mysys/my_thr_init.c 2019-10-10 09:40:38.591175329 +0200 @@ -35,6 +35,7 @@ #if !defined(HAVE_LOCALTIME_R) || !defined(HAVE_GMTIME_R) mysql_mutex_t LOCK_localtime_r; #endif +static void thread_cleanup(void* data); #ifdef _MSC_VER static void install_sigabrt_handler(); #endif @@ -195,7 +196,7 @@ without calling my_init() + my_end(). */ if (!my_thr_key_mysys_exists && - (pth_ret= pthread_key_create(&THR_KEY_mysys, NULL)) != 0) + (pth_ret= pthread_key_create(&THR_KEY_mysys, thread_cleanup)) != 0) { fprintf(stderr, "Can't initialize threads: error %d\n", pth_ret); return 1; @@ -400,6 +401,19 @@ pthread_setspecific(THR_KEY_mysys,0); + /* Cleanup using the Posix 1003.1 standard mechanism with pthread_key_create */ + thread_cleanup(tmp); +} + + +/* + Do the real thread memory cleanup. This is called explictly by + my_thread_end() or by the Posix 1003.1 thread cleanup mechanism. +*/ +static void thread_cleanup(void* data) +{ + struct st_my_thread_var *tmp = (struct st_my_thread_var*) data; + if (tmp && tmp->init) { #if !defined(DBUG_OFF)