Maybe someone sees a problem in my proposal. The only thing I see is that the read should appear before locking the current buffer or a "bad person" (me) could delay the new buffers for all others by connecting and then wait for a long time. I see the same problem in your current implementation.
I'm not sure the current implementation performs a read between locks but I agree that the server should not block other connections while waiting for a response from another connection.
I didn't wanted to say that the current implementation in trunk uses a read, but Jonathan Mzengeza's patch does it.
Best Regards, Sven