From 91bc7b2792e1df38f3efcb4fd36547c055eb1497 Mon Sep 17 00:00:00 2001 From: Markus Makela Date: Thu, 21 May 2015 11:41:11 +0300 Subject: [PATCH] Added missing spinlock calls to all monitors. --- server/core/monitor.c | 2 ++ server/modules/monitor/galeramon.c | 8 ++++++-- server/modules/monitor/mmmon.c | 9 +++++++-- server/modules/monitor/mysql_mon.c | 12 +++++++++--- server/modules/monitor/ndbclustermon.c | 6 +++++- 5 files changed, 29 insertions(+), 8 deletions(-) diff --git a/server/core/monitor.c b/server/core/monitor.c index 1013cf01b..30fdc756c 100644 --- a/server/core/monitor.c +++ b/server/core/monitor.c @@ -133,8 +133,10 @@ MONITOR *ptr; void monitorStart(MONITOR *monitor, void* params) { + spinlock_acquire(&monitor->lock); monitor->handle = (*monitor->module->startMonitor)(monitor,params); monitor->state = MONITOR_STATE_RUNNING; + spinlock_release(&monitor->lock); } /** diff --git a/server/modules/monitor/galeramon.c b/server/modules/monitor/galeramon.c index 404448d82..f1246afa7 100644 --- a/server/modules/monitor/galeramon.c +++ b/server/modules/monitor/galeramon.c @@ -405,15 +405,19 @@ static void monitorMain(void *arg) { MONITOR* mon = (MONITOR*)arg; -GALERA_MONITOR *handle = (GALERA_MONITOR *)mon->handle; +GALERA_MONITOR *handle; MONITOR_SERVERS *ptr; size_t nrounds = 0; MONITOR_SERVERS *candidate_master = NULL; -int master_stickiness = handle->disableMasterFailback; +int master_stickiness; int is_cluster=0; int log_no_members = 1; monitor_event_t evtype; + spinlock_acquire(&mon->lock); + handle = (GALERA_MONITOR *)mon->handle; + spinlock_release(&mon->lock); + master_stickiness = handle->disableMasterFailback; if (mysql_thread_init()) { LOGIF(LE, (skygw_log_write_flush( diff --git a/server/modules/monitor/mmmon.c b/server/modules/monitor/mmmon.c index 4ca8d6048..f56c77022 100644 --- a/server/modules/monitor/mmmon.c +++ b/server/modules/monitor/mmmon.c @@ -494,12 +494,17 @@ static void monitorMain(void *arg) { MONITOR* mon = (MONITOR*)arg; -MM_MONITOR *handle = (MM_MONITOR *)mon->handle; +MM_MONITOR *handle; MONITOR_SERVERS *ptr; -int detect_stale_master = handle->detectStaleMaster; +int detect_stale_master; MONITOR_SERVERS *root_master; size_t nrounds = 0; +spinlock_acquire(&mon->lock); +handle = (MM_MONITOR *)mon->handle; +spinlock_release(&mon->lock); +detect_stale_master = handle->detectStaleMaster; + if (mysql_thread_init()) { LOGIF(LE, (skygw_log_write_flush( diff --git a/server/modules/monitor/mysql_mon.c b/server/modules/monitor/mysql_mon.c index 1e7fde4e6..3295d23e9 100644 --- a/server/modules/monitor/mysql_mon.c +++ b/server/modules/monitor/mysql_mon.c @@ -507,15 +507,21 @@ static void monitorMain(void *arg) { MONITOR* mon = (MONITOR*) arg; -MYSQL_MONITOR *handle = (MYSQL_MONITOR *)mon->handle; +MYSQL_MONITOR *handle; MONITOR_SERVERS *ptr; -int replication_heartbeat = handle->replicationHeartbeat; -int detect_stale_master = handle->detectStaleMaster; +int replication_heartbeat; +int detect_stale_master; int num_servers=0; MONITOR_SERVERS *root_master = NULL; size_t nrounds = 0; int log_no_master = 1; +spinlock_acquire(&mon->lock); +handle = (MYSQL_MONITOR *)mon->handle; +spinlock_release(&mon->lock); +replication_heartbeat = handle->replicationHeartbeat; +detect_stale_master = handle->detectStaleMaster; + if (mysql_thread_init()) { LOGIF(LE, (skygw_log_write_flush( diff --git a/server/modules/monitor/ndbclustermon.c b/server/modules/monitor/ndbclustermon.c index 4488786af..a22daecbc 100644 --- a/server/modules/monitor/ndbclustermon.c +++ b/server/modules/monitor/ndbclustermon.c @@ -346,10 +346,14 @@ static void monitorMain(void *arg) { MONITOR* mon = arg; -MYSQL_MONITOR *handle = (MYSQL_MONITOR *)mon->handle; +MYSQL_MONITOR *handle; MONITOR_SERVERS *ptr; size_t nrounds = 0; +spinlock_acquire(&mon->lock); +handle = (MYSQL_MONITOR *)mon->handle; +spinlock_release(&mon->lock); + if (mysql_thread_init()) { LOGIF(LE, (skygw_log_write_flush(