Comments
Patch
@@ -497,11 +497,23 @@ int send_all(int fd, const void *buf, int len1)
static int unix_write(int fd, const uint8_t *buf, int len1)
{
int ret, len;
+ int flags;
+ bool nonblock;
+
+ flags = fcntl(fd, F_GETFL);
+ if (flags == -1) {
+ flags = 0;
+ }
+
+ nonblock = flags & O_NONBLOCK;
len = len1;
while (len > 0) {
ret = write(fd, buf, len);
if (ret < 0) {
+ if (errno == EAGAIN && nonblock) {
+ return -EAGAIN;
+ }
if (errno != EINTR && errno != EAGAIN) {
if (len1 - len) {
return len1 - len;
If the chardev we're writing to is nonblocking, just report -EAGAIN to the caller so that the caller can take any further action if it so wishes. Signed-off-by: Amit Shah <amit.shah@redhat.com> --- qemu-char.c | 12 ++++++++++++ 1 files changed, 12 insertions(+), 0 deletions(-)