I'm not familiar with the details of the code. My understanding is that persists occur in a separate thread from consumption and that when a persist occurs there is a transfer of buffers for each logical segment into the persist thread. New buffers are created for incoming consumption while prior buffers are passed to the persist thread. I think the locking that you are referring to would only occur when another persist event occurs before the persist thread has completed the prior persist operations.
I go through this in some detail tomorrow at
Druid Summit in the session Streaming Ingestion - A Look Under The Hood ! 1:30 PST.