Merge bk@192.168.21.1:mysql-5.0-opt
into mysql.com:/home/hf/work/33334/my50-33334
This commit is contained in:
commit
28b8fa10a8
@ -550,6 +550,17 @@ static int do_send_query(struct st_connection *cn, const char *q, int q_len,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void wait_query_thread_end(struct st_connection *con)
|
||||||
|
{
|
||||||
|
if (!con->query_done)
|
||||||
|
{
|
||||||
|
pthread_mutex_lock(&con->mutex);
|
||||||
|
while (!con->query_done)
|
||||||
|
pthread_cond_wait(&con->cond, &con->mutex);
|
||||||
|
pthread_mutex_unlock(&con->mutex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#else /*EMBEDDED_LIBRARY*/
|
#else /*EMBEDDED_LIBRARY*/
|
||||||
|
|
||||||
#define do_send_query(cn,q,q_len,flags) mysql_send_query(&cn->mysql, q, q_len)
|
#define do_send_query(cn,q,q_len,flags) mysql_send_query(&cn->mysql, q, q_len)
|
||||||
@ -4071,7 +4082,14 @@ void do_close_connection(struct st_command *command)
|
|||||||
con->mysql.net.vio = 0;
|
con->mysql.net.vio = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#else
|
||||||
|
/*
|
||||||
|
As query could be still executed in a separate theread
|
||||||
|
we need to check if the query's thread was finished and probably wait
|
||||||
|
(embedded-server specific)
|
||||||
|
*/
|
||||||
|
wait_query_thread_end(con);
|
||||||
|
#endif /*EMBEDDED_LIBRARY*/
|
||||||
if (con->stmt)
|
if (con->stmt)
|
||||||
mysql_stmt_close(con->stmt);
|
mysql_stmt_close(con->stmt);
|
||||||
con->stmt= 0;
|
con->stmt= 0;
|
||||||
@ -4361,6 +4379,9 @@ void do_connect(struct st_command *command)
|
|||||||
(int) (sizeof(connections)/sizeof(struct st_connection)));
|
(int) (sizeof(connections)/sizeof(struct st_connection)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef EMBEDDED_LIBRARY
|
||||||
|
con_slot->query_done= 1;
|
||||||
|
#endif
|
||||||
if (!mysql_init(&con_slot->mysql))
|
if (!mysql_init(&con_slot->mysql))
|
||||||
die("Failed on mysql_init()");
|
die("Failed on mysql_init()");
|
||||||
if (opt_compress || con_compress)
|
if (opt_compress || con_compress)
|
||||||
@ -5848,16 +5869,11 @@ void run_query_normal(struct st_connection *cn, struct st_command *command,
|
|||||||
}
|
}
|
||||||
#ifdef EMBEDDED_LIBRARY
|
#ifdef EMBEDDED_LIBRARY
|
||||||
/*
|
/*
|
||||||
Here we handle 'reap' command, so we need to check if the
|
Here we handle 'reap' command, so we need to check if the
|
||||||
query's thread was finished and probably wait
|
query's thread was finished and probably wait
|
||||||
*/
|
*/
|
||||||
else if (flags & QUERY_REAP_FLAG)
|
else if (flags & QUERY_REAP_FLAG)
|
||||||
{
|
wait_query_thread_end(cn);
|
||||||
pthread_mutex_lock(&cn->mutex);
|
|
||||||
while (!cn->query_done)
|
|
||||||
pthread_cond_wait(&cn->cond, &cn->mutex);
|
|
||||||
pthread_mutex_unlock(&cn->mutex);
|
|
||||||
}
|
|
||||||
#endif /*EMBEDDED_LIBRARY*/
|
#endif /*EMBEDDED_LIBRARY*/
|
||||||
if (!(flags & QUERY_REAP_FLAG))
|
if (!(flags & QUERY_REAP_FLAG))
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
|
@ -72,3 +72,4 @@ flush tables with read lock;
|
|||||||
unlock tables;
|
unlock tables;
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
set session low_priority_updates=default;
|
set session low_priority_updates=default;
|
||||||
|
select benchmark(200, (select sin(1))) > 1000;
|
||||||
|
@ -164,4 +164,13 @@ drop table t1, t2;
|
|||||||
|
|
||||||
set session low_priority_updates=default;
|
set session low_priority_updates=default;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #33334 mysqltest_embedded crashes when disconnecting before reap
|
||||||
|
#
|
||||||
|
|
||||||
|
connect (con1,localhost,root,,);
|
||||||
|
send select benchmark(200, (select sin(1))) > 1000;
|
||||||
|
disconnect con1;
|
||||||
|
connection default;
|
||||||
|
|
||||||
# End of 5.0 tests
|
# End of 5.0 tests
|
||||||
|
Loading…
x
Reference in New Issue
Block a user