msg: drain stack before stopping processors to avoid shutdown hang
`AsyncMessenger::shutdown()` called WorkerProcessor::stop() first,
killing the worker threads, then queued a C_drain callback via
stack->drain(). If a worker had already exited its event loop it never
processed the callback, so drain.wait() blocked forever and the monitor
shutdown hung for minutes.
Move stack->drain() ahead of the processors->stop() loop. With the new
order the workers are still alive to acknowledge the drain.