DRM currently dispatches remotely originated notifications to registered ReplicantListeners via its AsynchKeyChangeHandler thread. Notifications originating from local changes to the DRM are dispatched via the calling thread. This can lead to deadlocks a la the attached thread dump.
Task is to investigate having the locally originating notifications dispatched via the async thread.
This can be a pretty significant change, as I believe there's a fair bit of code that 1) registers as a DRM listener 2) invokes on the DRM 3) expects a callback from the DRM 4) continues on. Having #3 occur on a different thread could break things. And having the original thread somehow block after #2 until the desired callback comes in would defeat the purpose.