It's odd that PutMessage acquires a RLock, but PutMessages does not. Also i'm curious if a slow client (ie: sent a 1M body at 1byte/second) can cause problems because of where the RLock() is held. It sort of makes me think the topic check should be last right before the PutMessages call.