MXS-1833: Force all maxinfo traffic to the main thread

The same problem that caused maxadmin to lock up was also what caused
maxinfo to lock up. The concurrent access to the legacy administrative
functions caused deadlocks.
This commit is contained in:
Markus Mäkelä
2018-04-27 00:23:45 +03:00
parent 6cebe67374
commit cfa599aea8

View File

@ -3420,13 +3420,14 @@ int poll_add_dcb(DCB *dcb)
worker_id = MXS_WORKER_ALL;
}
else if (dcb->dcb_role == DCB_ROLE_CLIENT_HANDLER &&
strcasecmp(dcb->service->routerModule, "cli") == 0)
(strcasecmp(dcb->service->routerModule, "cli") == 0 ||
strcasecmp(dcb->service->routerModule, "maxinfo") == 0))
{
// If the DCB refers to an accepted maxadmin socket, we force it
// If the DCB refers to an accepted maxadmin/maxinfo socket, we force it
// to the main thread. That's done in order to prevent a deadlock
// that may happen if there are multiple concurrent maxadmin calls,
// that may happen if there are multiple concurrent administrative calls,
// handled by different worker threads.
// See: https://jira.mariadb.org/browse/MXS-1805
// See: https://jira.mariadb.org/browse/MXS-1805 and https://jira.mariadb.org/browse/MXS-1833
new_state = DCB_STATE_POLLING;
dcb->poll.thread.id = 0;
worker_id = dcb->poll.thread.id;