summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorBjorn Munch <bjorn.munch@oracle.com>2010-09-14 14:04:37 +0200
committerBjorn Munch <bjorn.munch@oracle.com>2010-09-14 14:04:37 +0200
commit64ae6d4a7e8f507d48c1b4fc0985d1d2733d6ce1 (patch)
treee07e0c1776bf2840264584cbbba2215ac3c7eb47 /client
parent4937eec1a21cd53110f0067dc9fb4c8fc1e9d7cc (diff)
downloadmariadb-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.cc13
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()");