I just noticed that we grab the we mark asyncClose() as synchronized and call decrementReferenceCount() on the ListetnableReferenceCounter with that lock held. This means that callback will be called with this lock held, which is an anti-pattern because it may lead to deadlocks. The solution is to simply decrement that counter at the end of those functions without that lock held.
This concerns the following classes:
MirroringResultScanner
MirroringTable
AsyncResultScannerWrapper
AsyncTableWrapper