Commit c206f3b9 authored by thek@adventure.(none)'s avatar thek@adventure.(none)

Bug #30768 query cache patch for bug #21074 crashes on windows

"pthread_mutex_trylock" isn't implemented correctly for the Windows platform.

This temporary patch reverts the patch for bug#21074 for Windows until
pthread_mutex_trylock is properly implemented. 
parent 461f559a
...@@ -1032,12 +1032,14 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length) ...@@ -1032,12 +1032,14 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length)
Query_cache_block_table *block_table, *block_table_end; Query_cache_block_table *block_table, *block_table_end;
ulong tot_length; ulong tot_length;
Query_cache_query_flags flags; Query_cache_query_flags flags;
#ifndef __WIN__
const uint spin_treshold= 50000; const uint spin_treshold= 50000;
const double lock_time_treshold= 0.1; /* Time in seconds */ const double lock_time_treshold= 0.1; /* Time in seconds */
uint spin_count= 0; uint spin_count= 0;
int lock_status= 0; int lock_status= 0;
ulong new_time= 0; ulong new_time= 0;
ulong stop_time= 0; ulong stop_time= 0;
#endif
DBUG_ENTER("Query_cache::send_result_to_client"); DBUG_ENTER("Query_cache::send_result_to_client");
...@@ -1085,6 +1087,9 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length) ...@@ -1085,6 +1087,9 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length)
} }
} }
#ifdef __WIN__
STRUCT_LOCK(&structure_guard_mutex);
#else
stop_time= my_clock()+(ulong)lock_time_treshold*CLOCKS_PER_SEC; stop_time= my_clock()+(ulong)lock_time_treshold*CLOCKS_PER_SEC;
while ((lock_status= pthread_mutex_trylock(&structure_guard_mutex)) == EBUSY while ((lock_status= pthread_mutex_trylock(&structure_guard_mutex)) == EBUSY
&& spin_count < spin_treshold && spin_count < spin_treshold
...@@ -1107,6 +1112,7 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length) ...@@ -1107,6 +1112,7 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length)
thd->lex->safe_to_cache_query= FALSE; thd->lex->safe_to_cache_query= FALSE;
goto err; goto err;
} }
#endif
if (query_cache_size == 0 || flush_in_progress) if (query_cache_size == 0 || flush_in_progress)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment