We're generating a lot of multi-part locking rules in these functions; do we actually need to release the lock before calling process_request, or can we just use a Locker object?
(If we do need to drop it, we can also just put the lock-sensitive areas in a block and use a Locker in that.)