I'm confident this has been solved a while ago. When this bug was reported, the code was indeed broken wrt EAGAIN handling.
The chardev code has long since been re-written though, and the send_all method replaced by io_channel_send_all() which will handle EAGAIN by returning instead of spinning in a loop.
Specifically this commit changed the code to stop spinning in send_all() on EAGAIN
commit 23673ca740e0eda66901ca801a5a901df378b063
Author: Anthony Liguori <email address hidden>
Date: Tue Mar 5 23:21:23 2013 +0530
qemu-char: add watch support
This allows a front-end to request for a callback when the backend
is writable again.
I'm confident this has been solved a while ago. When this bug was reported, the code was indeed broken wrt EAGAIN handling.
The chardev code has long since been re-written though, and the send_all method replaced by io_channel_ send_all( ) which will handle EAGAIN by returning instead of spinning in a loop.
Specifically this commit changed the code to stop spinning in send_all() on EAGAIN
commit 23673ca740e0eda 66901ca801a5a90 1df378b063
Author: Anthony Liguori <email address hidden>
Date: Tue Mar 5 23:21:23 2013 +0530
qemu-char: add watch support
This allows a front-end to request for a callback when the backend
is writable again.