Manual dispatch ran into this because you can't assume that RPC will occur at arbitrary times. Particularly - mir_buffer_stream_swap_buffers_sync() will first call mir_buffer_stream_swap_buffers() and then, in the same thread, pump the event loop until the wait handle resolves.
Except mir_buffer_stream_swap_buffers() calls get_current_buffer(), which blocks waiting for an IPC event that we'll never dispatch because we're blocked :).
Manual dispatch ran into this because you can't assume that RPC will occur at arbitrary times. Particularly - mir_buffer_ stream_ swap_buffers_ sync() will first call mir_buffer_ stream_ swap_buffers( ) and then, in the same thread, pump the event loop until the wait handle resolves.
Except mir_buffer_ stream_ swap_buffers( ) calls get_current_ buffer( ), which blocks waiting for an IPC event that we'll never dispatch because we're blocked :).