diff --git a/mysys/thr_alarm.c b/mysys/thr_alarm.c
index d0bb2f1ef4ce5c6b1d63958f82e61f3a766b26e3..9d917d3dd598a56f9d9f813dcdde96e83e1649ee 100644
--- a/mysys/thr_alarm.c
+++ b/mysys/thr_alarm.c
@@ -694,7 +694,7 @@ static void *test_thread(void *arg)
   thread_count--;
   mysql_cond_signal(&COND_thread_count); /* Tell main we are ready */
   mysql_mutex_unlock(&LOCK_thread_count);
-  free((uchar*) arg);
+  my_thread_end();
   return 0;
 }
 
@@ -771,7 +771,7 @@ int main(int argc __attribute__((unused)),char **argv __attribute__((unused)))
 {
   pthread_t tid;
   pthread_attr_t thr_attr;
-  int i,*param,error;
+  int i, param[2], error;
   sigset_t set;
   ALARM_INFO alarm_info;
   MY_INIT(argv[0]);
@@ -815,12 +815,11 @@ int main(int argc __attribute__((unused)),char **argv __attribute__((unused)))
   printf("Main thread: %s\n",my_thread_name());
   for (i=0 ; i < 2 ; i++)
   {
-    param=(int*) malloc(sizeof(int));
-    *param= i;
+    param[i]= i;
     mysql_mutex_lock(&LOCK_thread_count);
     if ((error= mysql_thread_create(0,
                                     &tid, &thr_attr, test_thread,
-                                    (void*) param)))
+                                    (void*) &param[i])))
     {
       printf("Can't create thread %d, error: %d\n",i,error);
       exit(1);
@@ -851,6 +850,9 @@ int main(int argc __attribute__((unused)),char **argv __attribute__((unused)))
 	 alarm_info.active_alarms, alarm_info.max_used_alarms,
 	 alarm_info.next_alarm_time);
   printf("Test succeeded\n");
+  mysql_cond_destroy(&COND_thread_count);
+  mysql_mutex_destroy(&LOCK_thread_count);
+  my_end(MY_CHECK_ERROR);
   return 0;
 }
 
diff --git a/mysys/thr_lock.c b/mysys/thr_lock.c
index 1782aecd4df50de61acaa577ad6ddd61e93328e8..8dce58dd58a7ef7e082e5c6fb4241bb175a29043 100644
--- a/mysys/thr_lock.c
+++ b/mysys/thr_lock.c
@@ -1726,7 +1726,7 @@ static void *test_thread(void *arg)
   thread_count--;
   mysql_cond_signal(&COND_thread_count); /* Tell main we are ready */
   mysql_mutex_unlock(&LOCK_thread_count);
-  free((uchar*) arg);
+  my_thread_end();
   return 0;
 }
 
@@ -1735,7 +1735,7 @@ int main(int argc __attribute__((unused)),char **argv __attribute__((unused)))
 {
   pthread_t tid;
   pthread_attr_t thr_attr;
-  int *param,error;
+  int param[array_elements(lock_counts)], error;
   uint i;
   MY_INIT(argv[0]);
   if (argc > 1 && argv[1][0] == '-' && argv[1][1] == '#')
@@ -1791,8 +1791,7 @@ int main(int argc __attribute__((unused)),char **argv __attribute__((unused)))
 #endif
   for (i=0 ; i < array_elements(lock_counts) ; i++)
   {
-    param=(int*) malloc(sizeof(int));
-    *param=i;
+    param[i]= i;
 
     if ((error= mysql_mutex_lock(&LOCK_thread_count)))
     {
@@ -1802,7 +1801,7 @@ int main(int argc __attribute__((unused)),char **argv __attribute__((unused)))
     }
     if ((error= mysql_thread_create(0,
                                     &tid, &thr_attr, test_thread,
-                                    (void*) param)))
+                                    (void*) &param[i])))
     {
       fprintf(stderr, "Got error: %d from mysql_thread_create (errno: %d)\n",
               error, errno);
@@ -1831,6 +1830,9 @@ int main(int argc __attribute__((unused)),char **argv __attribute__((unused)))
   else
 #endif
     printf("Test succeeded\n");
+  mysql_cond_destroy(&COND_thread_count);
+  mysql_mutex_destroy(&LOCK_thread_count);
+  my_end(MY_CHECK_ERROR);
   return 0;
 }