I'm trying to get my head around how the flow control in vmbus ring buffers works. In particular, I'm failing to see how the following can be prevented: producer | consumer ================================================================== read read_index | (enough room for packet) | write pending_send_sz = 0 | write packet | update write_index | | read write_index read read_index | read packet (not enough room for packet) | update read_index (= write_index) | read pending_send_sz = 0 write pending_send_sz = X | skip notification go to sleep | go to sleep stall Could anybody please shed some light on how it's supposed to work? Thanks, Roman.