summaryrefslogtreecommitdiff
path: root/sql/event_scheduler.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/event_scheduler.cc')
-rw-r--r--sql/event_scheduler.cc17
1 files changed, 12 insertions, 5 deletions
diff --git a/sql/event_scheduler.cc b/sql/event_scheduler.cc
index ea20270b457..880bccdd67e 100644
--- a/sql/event_scheduler.cc
+++ b/sql/event_scheduler.cc
@@ -133,9 +133,10 @@ post_init_event_thread(THD *thd)
pthread_mutex_lock(&LOCK_thread_count);
threads.append(thd);
thread_count++;
- thread_running++;
pthread_mutex_unlock(&LOCK_thread_count);
-
+ my_atomic_rwlock_wrlock(&global_query_id_lock);
+ inc_thread_running();
+ my_atomic_rwlock_wrunlock(&global_query_id_lock);
return FALSE;
}
@@ -157,10 +158,12 @@ deinit_event_thread(THD *thd)
DBUG_PRINT("exit", ("Event thread finishing"));
pthread_mutex_lock(&LOCK_thread_count);
thread_count--;
- thread_running--;
delete thd;
pthread_cond_broadcast(&COND_thread_count);
pthread_mutex_unlock(&LOCK_thread_count);
+ my_atomic_rwlock_wrlock(&global_query_id_lock);
+ dec_thread_running();
+ my_atomic_rwlock_wrunlock(&global_query_id_lock);
}
@@ -418,10 +421,12 @@ Event_scheduler::start()
net_end(&new_thd->net);
pthread_mutex_lock(&LOCK_thread_count);
thread_count--;
- thread_running--;
delete new_thd;
pthread_cond_broadcast(&COND_thread_count);
pthread_mutex_unlock(&LOCK_thread_count);
+ my_atomic_rwlock_wrlock(&global_query_id_lock);
+ dec_thread_running();
+ my_atomic_rwlock_wrunlock(&global_query_id_lock);
}
end:
UNLOCK_DATA();
@@ -551,10 +556,12 @@ error:
net_end(&new_thd->net);
pthread_mutex_lock(&LOCK_thread_count);
thread_count--;
- thread_running--;
delete new_thd;
pthread_cond_broadcast(&COND_thread_count);
pthread_mutex_unlock(&LOCK_thread_count);
+ my_atomic_rwlock_wrlock(&global_query_id_lock);
+ dec_thread_running();
+ my_atomic_rwlock_wrunlock(&global_query_id_lock);
}
delete event_name;
DBUG_RETURN(TRUE);