abandon ReadWriteReentrantLock and simplify locking to a single lock that is used for subscription and disconnect