MXS-2314 Do not accept NULL when starting/stopping monitor

This commit is contained in:
Johan Wikman
2019-02-08 14:51:15 +02:00
parent 3646c118c9
commit dffb933efa
2 changed files with 33 additions and 29 deletions

View File

@ -254,21 +254,20 @@ void MonitorManager::destroy_all_monitors()
*/ */
void MonitorManager::monitor_start(Monitor* monitor, const MXS_CONFIG_PARAMETER* params) void MonitorManager::monitor_start(Monitor* monitor, const MXS_CONFIG_PARAMETER* params)
{ {
if (monitor) mxb_assert(monitor);
{
Guard guard(monitor->m_lock);
// Only start the monitor if it's stopped. Guard guard(monitor->m_lock);
if (monitor->m_state == MONITOR_STATE_STOPPED)
// Only start the monitor if it's stopped.
if (monitor->m_state == MONITOR_STATE_STOPPED)
{
if (monitor->start(params))
{ {
if (monitor->start(params)) monitor->m_state = MONITOR_STATE_RUNNING;
{ }
monitor->m_state = MONITOR_STATE_RUNNING; else
} {
else MXS_ERROR("Failed to start monitor '%s'.", monitor->m_name);
{
MXS_ERROR("Failed to start monitor '%s'.", monitor->m_name);
}
} }
} }
} }
@ -302,23 +301,22 @@ void monitor_start_all()
*/ */
void monitor_stop(Monitor* monitor) void monitor_stop(Monitor* monitor)
{ {
if (monitor) mxb_assert(monitor);
Guard guard(monitor->m_lock);
/** Only stop the monitor if it is running */
if (monitor->m_state == MONITOR_STATE_RUNNING)
{ {
Guard guard(monitor->m_lock); monitor->m_state = MONITOR_STATE_STOPPING;
monitor->stop();
monitor->m_state = MONITOR_STATE_STOPPED;
/** Only stop the monitor if it is running */ for (auto db : monitor->m_servers)
if (monitor->m_state == MONITOR_STATE_RUNNING)
{ {
monitor->m_state = MONITOR_STATE_STOPPING; // TODO: Create a generic entry point for this or move it inside stopMonitor
monitor->stop(); mysql_close(db->con);
monitor->m_state = MONITOR_STATE_STOPPED; db->con = NULL;
for (auto db : monitor->m_servers)
{
// TODO: Create a generic entry point for this or move it inside stopMonitor
mysql_close(db->con);
db->con = NULL;
}
} }
} }
} }

View File

@ -260,14 +260,20 @@ private:
HttpResponse cb_stop_monitor(const HttpRequest& request) HttpResponse cb_stop_monitor(const HttpRequest& request)
{ {
Monitor* monitor = monitor_find(request.uri_part(1).c_str()); Monitor* monitor = monitor_find(request.uri_part(1).c_str());
monitor_stop(monitor); if (monitor)
{
monitor_stop(monitor);
}
return HttpResponse(MHD_HTTP_NO_CONTENT); return HttpResponse(MHD_HTTP_NO_CONTENT);
} }
HttpResponse cb_start_monitor(const HttpRequest& request) HttpResponse cb_start_monitor(const HttpRequest& request)
{ {
Monitor* monitor = monitor_find(request.uri_part(1).c_str()); Monitor* monitor = monitor_find(request.uri_part(1).c_str());
MonitorManager::monitor_start(monitor, monitor->parameters); if (monitor)
{
MonitorManager::monitor_start(monitor, monitor->parameters);
}
return HttpResponse(MHD_HTTP_NO_CONTENT); return HttpResponse(MHD_HTTP_NO_CONTENT);
} }