Commit 28b8fa10 authored by holyfoot/hf@hfmain.(none)'s avatar holyfoot/hf@hfmain.(none)
Browse files

Merge bk@192.168.21.1:mysql-5.0-opt

into  mysql.com:/home/hf/work/33334/my50-33334
parents dff2a4c3 635b44f1
Loading
Loading
Loading
Loading
+25 −9
Original line number Diff line number Diff line
@@ -550,6 +550,17 @@ static int do_send_query(struct st_connection *cn, const char *q, int q_len,
  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*/

#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;
    }
  }
#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)
    mysql_stmt_close(con->stmt);
  con->stmt= 0;
@@ -4361,6 +4379,9 @@ void do_connect(struct st_command *command)
          (int) (sizeof(connections)/sizeof(struct st_connection)));
  }

#ifdef EMBEDDED_LIBRARY
  con_slot->query_done= 1;
#endif
  if (!mysql_init(&con_slot->mysql))
    die("Failed on mysql_init()");
  if (opt_compress || con_compress)
@@ -5852,12 +5873,7 @@ void run_query_normal(struct st_connection *cn, struct st_command *command,
    query's thread was finished and probably wait
  */
  else if (flags & QUERY_REAP_FLAG)
  {
    pthread_mutex_lock(&cn->mutex);
    while (!cn->query_done)
      pthread_cond_wait(&cn->cond, &cn->mutex);
    pthread_mutex_unlock(&cn->mutex);
  }
    wait_query_thread_end(cn);
#endif /*EMBEDDED_LIBRARY*/
  if (!(flags & QUERY_REAP_FLAG))
    DBUG_VOID_RETURN;
+1 −0
Original line number Diff line number Diff line
@@ -72,3 +72,4 @@ flush tables with read lock;
unlock tables;
drop table t1, t2;
set session low_priority_updates=default;
select benchmark(200, (select sin(1))) > 1000;
+9 −0
Original line number Diff line number Diff line
@@ -164,4 +164,13 @@ drop table t1, t2;

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