PROTON-2130: epoll proactor io bytes accounting fix for shutdown and error
diff --git a/c/src/proactor/epoll.c b/c/src/proactor/epoll.c
index 1283d91..21c611f 100644
--- a/c/src/proactor/epoll.c
+++ b/c/src/proactor/epoll.c
@@ -1417,6 +1417,7 @@
} else if (errno == EWOULDBLOCK) {
pc->write_blocked = true;
} else if (!(errno == EAGAIN || errno == EINTR)) {
+ pc->wbuf_remaining = 0;
return false;
}
return true;
@@ -1586,6 +1587,7 @@
pc->read_blocked = true;
}
else if (n == 0) {
+ pc->read_blocked = true;
pn_connection_driver_read_close(&pc->driver);
}
else if (errno == EWOULDBLOCK)
@@ -1594,6 +1596,8 @@
psocket_error(&pc->psocket, errno, pc->disconnected ? "disconnected" : "on read from");
}
}
+ } else {
+ pc->read_blocked = true;
}
if (tick_required) {