Commit c9111fc6 authored by unknown's avatar unknown

- use the connection_attib used to spawn threads

  in the server. this fixes the problem with the limited number of
  threads because of them being non-detached. pthread_detach_this_tread()
  expands to empty on most platforms including SuSE but pthread_detach(pthread_self())
  is not portable on Windows so the first macro should be used and the thread
  to be detached we have to create it as such.
fix for bug#16984 (Events: running out of threads)
WL#1034 (Internal CRON)


sql/event_executor.cc:
  - use the connection_attib used to spawn threads
    in the server. this fixes the problem with the limited number of
    threads because of them being non-detached. pthread_detach_this_tread()
    expands to empty on most platforms including SuSE but pthread_detach(pthread_self())
    is not portable on Windows so the first macro should be used and the thread
    to be detached we have to create it as such.
parent 41f7cb2a
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
extern ulong thread_created; extern ulong thread_created;
extern const char *my_localhost; extern const char *my_localhost;
extern pthread_attr_t connection_attrib;
pthread_mutex_t LOCK_event_arrays, pthread_mutex_t LOCK_event_arrays,
LOCK_workers_count, LOCK_workers_count,
...@@ -41,7 +42,7 @@ bool evex_is_running= false; ...@@ -41,7 +42,7 @@ bool evex_is_running= false;
ulonglong evex_main_thread_id= 0; ulonglong evex_main_thread_id= 0;
ulong opt_event_executor; ulong opt_event_executor;
volatile my_bool event_executor_running_global_var; my_bool event_executor_running_global_var;
static my_bool evex_mutexes_initted= false; static my_bool evex_mutexes_initted= false;
static uint workers_count; static uint workers_count;
...@@ -102,7 +103,7 @@ init_events() ...@@ -102,7 +103,7 @@ init_events()
{ {
#ifndef DBUG_FAULTY_THR #ifndef DBUG_FAULTY_THR
//TODO Andrey: Change the error code returned! //TODO Andrey: Change the error code returned!
if (pthread_create(&th, NULL, event_executor_main, (void*)NULL)) if (pthread_create(&th, &connection_attrib, event_executor_main,(void*)NULL))
DBUG_RETURN(ER_SLAVE_THREAD); DBUG_RETURN(ER_SLAVE_THREAD);
#else #else
event_executor_main(NULL); event_executor_main(NULL);
...@@ -351,7 +352,7 @@ event_executor_main(void *arg) ...@@ -351,7 +352,7 @@ event_executor_main(void *arg)
++iter_num; ++iter_num;
DBUG_PRINT("info", (" Spawning a thread %d", iter_num)); DBUG_PRINT("info", (" Spawning a thread %d", iter_num));
#ifndef DBUG_FAULTY_THR #ifndef DBUG_FAULTY_THR
if (pthread_create(&th, NULL, event_executor_worker, (void*)et)) if (pthread_create(&th,&connection_attrib,event_executor_worker,(void*)et))
{ {
sql_print_error("Problem while trying to create a thread"); sql_print_error("Problem while trying to create a thread");
UNLOCK_MUTEX_AND_BAIL_OUT(LOCK_event_arrays, err); UNLOCK_MUTEX_AND_BAIL_OUT(LOCK_event_arrays, err);
......
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