Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
2.3.0, 2.4.0
-
None
Description
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
Attachments
Issue Links
- links to