Commit c4394949 authored by Vladislav Vaintroub's avatar Vladislav Vaintroub

Fix Unix build

parent e91bbca5
...@@ -766,6 +766,8 @@ THD::THD() ...@@ -766,6 +766,8 @@ THD::THD()
stmt_arena= this; stmt_arena= this;
thread_stack= 0; thread_stack= 0;
scheduler= thread_scheduler; // Will be fixed later scheduler= thread_scheduler; // Will be fixed later
event_scheduler.data= 0;
event_scheduler.m_psi= 0;
extra_port= 0; extra_port= 0;
catalog= (char*)"std"; // the only catalog we have for now catalog= (char*)"std"; // the only catalog we have for now
main_security_ctx.init(); main_security_ctx.init();
......
...@@ -2180,7 +2180,7 @@ static Sys_var_ulong Sys_thread_cache_size( ...@@ -2180,7 +2180,7 @@ static Sys_var_ulong Sys_thread_cache_size(
GLOBAL_VAR(thread_cache_size), CMD_LINE(REQUIRED_ARG), GLOBAL_VAR(thread_cache_size), CMD_LINE(REQUIRED_ARG),
VALID_RANGE(0, 16384), DEFAULT(0), BLOCK_SIZE(1)); VALID_RANGE(0, 16384), DEFAULT(0), BLOCK_SIZE(1));
#ifndef HAVE_POOL_OF_THREADS
static bool fix_tp_max_threads(sys_var *, THD *, enum_var_type) static bool fix_tp_max_threads(sys_var *, THD *, enum_var_type)
{ {
#ifdef _WIN32 #ifdef _WIN32
...@@ -2197,6 +2197,7 @@ static bool fix_tp_min_threads(sys_var *, THD *, enum_var_type) ...@@ -2197,6 +2197,7 @@ static bool fix_tp_min_threads(sys_var *, THD *, enum_var_type)
} }
#endif #endif
#ifdef _WIN32 #ifdef _WIN32
static Sys_var_uint Sys_threadpool_min_threads( static Sys_var_uint Sys_threadpool_min_threads(
"thread_pool_min_threads", "thread_pool_min_threads",
...@@ -2239,7 +2240,6 @@ static Sys_var_uint Sys_threadpool_max_threads( ...@@ -2239,7 +2240,6 @@ static Sys_var_uint Sys_threadpool_max_threads(
NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0),
ON_UPDATE(fix_tp_max_threads) ON_UPDATE(fix_tp_max_threads)
); );
#endif /* !HAVE_POOL_OF_THREADS */
/** /**
......
...@@ -124,7 +124,6 @@ struct connection_t ...@@ -124,7 +124,6 @@ struct connection_t
}; };
/* Externals functions and variables we use */ /* Externals functions and variables we use */
extern uint thread_created;
extern void scheduler_init(); extern void scheduler_init();
extern pthread_attr_t *get_connection_attrib(void); extern pthread_attr_t *get_connection_attrib(void);
extern int skip_net_wait_timeout; extern int skip_net_wait_timeout;
...@@ -408,7 +407,7 @@ static void timeout_check(pool_timer_t *timer) ...@@ -408,7 +407,7 @@ static void timeout_check(pool_timer_t *timer)
if (thd->net.reading_or_writing != 1) if (thd->net.reading_or_writing != 1)
continue; continue;
connection_t *connection= (connection_t *)thd->scheduler.data; connection_t *connection= (connection_t *)thd->event_scheduler.data;
if (!connection) if (!connection)
continue; continue;
...@@ -416,7 +415,7 @@ static void timeout_check(pool_timer_t *timer) ...@@ -416,7 +415,7 @@ static void timeout_check(pool_timer_t *timer)
{ {
/* Wait timeout exceeded, kill connection. */ /* Wait timeout exceeded, kill connection. */
mysql_mutex_lock(&thd->LOCK_thd_data); mysql_mutex_lock(&thd->LOCK_thd_data);
thd->killed = THD::KILL_CONNECTION; thd->killed = KILL_CONNECTION;
tp_post_kill_notification(thd); tp_post_kill_notification(thd);
mysql_mutex_unlock(&thd->LOCK_thd_data); mysql_mutex_unlock(&thd->LOCK_thd_data);
} }
...@@ -449,7 +448,7 @@ static void* timer_thread(void *param) ...@@ -449,7 +448,7 @@ static void* timer_thread(void *param)
pool_timer_t* timer=(pool_timer_t *)param; pool_timer_t* timer=(pool_timer_t *)param;
timer->next_timeout_check= ULONGLONG_MAX; timer->next_timeout_check= ULONGLONG_MAX;
timer->current_microtime= my_micro_time(); timer->current_microtime= microsecond_interval_timer();
my_thread_init(); my_thread_init();
DBUG_ENTER("timer_thread"); DBUG_ENTER("timer_thread");
...@@ -464,7 +463,7 @@ static void* timer_thread(void *param) ...@@ -464,7 +463,7 @@ static void* timer_thread(void *param)
break; break;
if (err == ETIMEDOUT) if (err == ETIMEDOUT)
{ {
timer->current_microtime= my_micro_time(); timer->current_microtime= microsecond_interval_timer();
/* Check stallls in thread groups */ /* Check stallls in thread groups */
for(i=0; i< threadpool_size;i++) for(i=0; i< threadpool_size;i++)
...@@ -643,7 +642,7 @@ static int create_worker(thread_group_t *thread_group) ...@@ -643,7 +642,7 @@ static int create_worker(thread_group_t *thread_group)
if (!err) if (!err)
{ {
thread_group->pending_thread_start_count++; thread_group->pending_thread_start_count++;
thread_group->last_thread_creation_time=my_micro_time(); thread_group->last_thread_creation_time=microsecond_interval_timer();
} }
DBUG_RETURN(err); DBUG_RETURN(err);
} }
...@@ -673,7 +672,7 @@ static int wake_or_create_thread(thread_group_t *thread_group) ...@@ -673,7 +672,7 @@ static int wake_or_create_thread(thread_group_t *thread_group)
DBUG_RETURN(create_worker(thread_group)); DBUG_RETURN(create_worker(thread_group));
} }
now = my_micro_time(); now = microsecond_interval_timer();
time_since_last_thread_created = time_since_last_thread_created =
(now - thread_group->last_thread_creation_time)/1000; (now - thread_group->last_thread_creation_time)/1000;
...@@ -994,7 +993,7 @@ void tp_add_connection(THD *thd) ...@@ -994,7 +993,7 @@ void tp_add_connection(THD *thd)
mysql_mutex_lock(&c->thread_group->mutex); mysql_mutex_lock(&c->thread_group->mutex);
c->thread_group->connection_count++; c->thread_group->connection_count++;
mysql_mutex_unlock(&c->thread_group->mutex); mysql_mutex_unlock(&c->thread_group->mutex);
c->thd->scheduler.data = c; c->thd->event_scheduler.data = c;
post_event(c->thread_group,&c->event); post_event(c->thread_group,&c->event);
} }
...@@ -1032,7 +1031,7 @@ void tp_wait_begin(THD *thd, int type) ...@@ -1032,7 +1031,7 @@ void tp_wait_begin(THD *thd, int type)
if (!thd) if (!thd)
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
connection_t *connection = (connection_t *)thd->scheduler.data; connection_t *connection = (connection_t *)thd->event_scheduler.data;
if(connection) if(connection)
{ {
DBUG_ASSERT(!connection->waiting); DBUG_ASSERT(!connection->waiting);
...@@ -1049,7 +1048,7 @@ void tp_wait_end(THD *thd) ...@@ -1049,7 +1048,7 @@ void tp_wait_end(THD *thd)
if (!thd) if (!thd)
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
connection_t *connection = (connection_t *)thd->scheduler.data; connection_t *connection = (connection_t *)thd->event_scheduler.data;
if(connection) if(connection)
{ {
DBUG_ASSERT(connection->waiting); DBUG_ASSERT(connection->waiting);
...@@ -1077,7 +1076,7 @@ static void set_wait_timeout(connection_t *c) ...@@ -1077,7 +1076,7 @@ static void set_wait_timeout(connection_t *c)
DBUG_ENTER("set_wait_timeout"); DBUG_ENTER("set_wait_timeout");
/* /*
Calculate wait deadline for this connection. Calculate wait deadline for this connection.
Instead of using my_micro_time() which has a syscall Instead of using microsecond_interval_timer() which has a syscall
overhead, use pool_timer.current_microtime and take overhead, use pool_timer.current_microtime and take
into account that its value could be off by at most into account that its value could be off by at most
one tick interval. one tick interval.
......
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