There is a deadlock between LiveListenerBus#stop and AsyncEventQueue#removeListenerOnError.
we can reproduce as follows:
- Post some events to LiveListenerBus
- Call LiveListenerBus#stop and hold the synchronized lock of bus, waiting until all the events are processed by listeners, then remove all the queues
- Event queue would drain out events by posting to its listeners. If a listener is interrupted, it will call AsyncEventQueue#removeListenerOnError, inside it will call bus.removeListener, trying to acquire synchronized lock of bus, resulting in deadlock