summaryrefslogtreecommitdiff
path: root/lib/async_req
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2009-05-30 09:49:17 +0200
committerVolker Lendecke <vl@samba.org>2009-05-30 09:51:02 +0200
commit625851a50f74024f5918e0b348147457c2cc42ea (patch)
tree6b6bf38a25e89be71e0028eeda968f68970ed78e /lib/async_req
parentdf167ee7712a9c92fcb6ca1541dc4d1e5d93da02 (diff)
downloadsamba-625851a50f74024f5918e0b348147457c2cc42ea.tar.gz
samba-625851a50f74024f5918e0b348147457c2cc42ea.tar.bz2
samba-625851a50f74024f5918e0b348147457c2cc42ea.zip
Handle EINTR in async_sock.c
Diffstat (limited to 'lib/async_req')
-rw-r--r--lib/async_req/async_sock.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/async_req/async_sock.c b/lib/async_req/async_sock.c
index 09eec10fc5..d88edb177a 100644
--- a/lib/async_req/async_sock.c
+++ b/lib/async_req/async_sock.c
@@ -81,6 +81,10 @@ static void async_send_handler(struct tevent_context *ev,
tevent_req_data(req, struct async_send_state);
state->sent = send(state->fd, state->buf, state->len, state->flags);
+ if ((state->sent == -1) && (errno == EINTR)) {
+ /* retry */
+ return;
+ }
if (state->sent == -1) {
tevent_req_error(req, errno);
return;
@@ -148,6 +152,10 @@ static void async_recv_handler(struct tevent_context *ev,
state->received = recv(state->fd, state->buf, state->len,
state->flags);
+ if ((state->received == -1) && (errno == EINTR)) {
+ /* retry */
+ return;
+ }
if (state->received == -1) {
tevent_req_error(req, errno);
return;
@@ -427,6 +435,10 @@ static void writev_handler(struct tevent_context *ev, struct tevent_fd *fde,
}
written = writev(state->fd, state->iov, state->count);
+ if ((written == -1) && (errno = EINTR)) {
+ /* retry */
+ return;
+ }
if (written == -1) {
tevent_req_error(req, errno);
return;
@@ -534,6 +546,10 @@ static void read_packet_handler(struct tevent_context *ev,
nread = recv(state->fd, state->buf+state->nread, total-state->nread,
0);
+ if ((nread == -1) && (errno == EINTR)) {
+ /* retry */
+ return;
+ }
if (nread == -1) {
tevent_req_error(req, errno);
return;