MXS-2547: Don't post messages to stopped workers

If a worker has been stopped, tasks must not be executed on it. To prevent
this, the calling code should check whether the worker has been
stopped. This does not prevent the case where a message is successfully
posted to a worker but the worker is stopped before it processes it.
This commit is contained in:
Markus Mäkelä 2019-06-18 11:00:58 +03:00
parent b7294a28af
commit 69b3879357
No known key found for this signature in database
GPG Key ID: 72D48FCE664F7B19

View File

@ -718,12 +718,17 @@ size_t Worker::execute_concurrently(Task& task)
bool Worker::post_message(uint32_t msg_id, intptr_t arg1, intptr_t arg2)
{
// NOTE: No logging here, this function must be signal safe.
bool rval = false;
ss_dassert(state() != Worker::STOPPED);
// NOTE: No logging here, this function must be signal safe.
MessageQueue::Message message(msg_id, arg1, arg2);
if (state() != Worker::STOPPED)
{
MessageQueue::Message message(msg_id, arg1, arg2);
rval = m_pQueue->post(message);
}
return m_pQueue->post(message);
return rval;
}
bool mxs_worker_post_message(MXS_WORKER* pWorker, uint32_t msg_id, intptr_t arg1, intptr_t arg2)