diff options
author | Bjorn Munch <bjorn.munch@oracle.com> | 2010-09-14 14:04:37 +0200 |
---|---|---|
committer | Bjorn Munch <bjorn.munch@oracle.com> | 2010-09-14 14:04:37 +0200 |
commit | 64ae6d4a7e8f507d48c1b4fc0985d1d2733d6ce1 (patch) | |
tree | e07e0c1776bf2840264584cbbba2215ac3c7eb47 /client | |
parent | 4937eec1a21cd53110f0067dc9fb4c8fc1e9d7cc (diff) | |
download | mariadb-git-64ae6d4a7e8f507d48c1b4fc0985d1d2733d6ce1.tar.gz |
Bug #55426 mysqltest crashes when trying to unlock not acquired mutex
Bug #55546 mysqltest fails to create a new thread on HPUX
Missing call to pthread_join(), in embedded mode
This independently solves both problems, see 55426 for details.
Addendum: cannot test against a pthread_t, adds boolean flag instead
Diffstat (limited to 'client')
-rw-r--r-- | client/mysqltest.cc | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/client/mysqltest.cc b/client/mysqltest.cc index ec8aa0f0110..31854737cbc 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -242,7 +242,9 @@ struct st_connection int cur_query_len; pthread_mutex_t mutex; pthread_cond_t cond; + pthread_t tid; int query_done; + my_bool has_thread; #endif /*EMBEDDED_LIBRARY*/ }; @@ -733,8 +735,6 @@ pthread_handler_t send_one_query(void *arg) static int do_send_query(struct st_connection *cn, const char *q, int q_len, int flags) { - pthread_t tid; - if (flags & QUERY_REAP_FLAG) return mysql_send_query(&cn->mysql, q, q_len); @@ -745,9 +745,10 @@ static int do_send_query(struct st_connection *cn, const char *q, int q_len, cn->cur_query= q; cn->cur_query_len= q_len; cn->query_done= 0; - if (pthread_create(&tid, &cn_thd_attrib, send_one_query, (void*)cn)) + if (pthread_create(&cn->tid, &cn_thd_attrib, send_one_query, (void*)cn)) die("Cannot start new thread for query"); + cn->has_thread= TRUE; return 0; } @@ -760,6 +761,11 @@ static void wait_query_thread_end(struct st_connection *con) pthread_cond_wait(&con->cond, &con->mutex); pthread_mutex_unlock(&con->mutex); } + if (con->has_thread) + { + pthread_join(con->tid, NULL); + con->has_thread= FALSE; + } } #else /*EMBEDDED_LIBRARY*/ @@ -5187,6 +5193,7 @@ void do_connect(struct st_command *command) #ifdef EMBEDDED_LIBRARY con_slot->query_done= 1; + con_slot->has_thread= FALSE; #endif if (!mysql_init(&con_slot->mysql)) die("Failed on mysql_init()"); |