refactor EAGAIN/EINTR processing
diff --git a/src/os/unix/ngx_darwin_sendfile_chain.c b/src/os/unix/ngx_darwin_sendfile_chain.c
index e3ec7f7..59d4653 100644
--- a/src/os/unix/ngx_darwin_sendfile_chain.c
+++ b/src/os/unix/ngx_darwin_sendfile_chain.c
@@ -42,7 +42,7 @@
u_char *prev;
off_t size, send, prev_send, aligned, sent, fprev;
off_t header_size, file_size;
- ngx_uint_t eintr, eagain, complete;
+ ngx_uint_t eintr, complete;
ngx_err_t err;
ngx_buf_t *file;
ngx_array_t header, trailer;
@@ -75,7 +75,6 @@
}
send = 0;
- eagain = 0;
header.elts = headers;
header.size = sizeof(struct iovec);
@@ -238,22 +237,22 @@
if (rc == -1) {
err = ngx_errno;
- if (err == NGX_EAGAIN || err == NGX_EINTR) {
- if (err == NGX_EINTR) {
- eintr = 1;
+ switch (err) {
+ case NGX_EAGAIN:
+ break;
- } else {
- eagain = 1;
- }
+ case NGX_EINTR:
+ eintr = 1;
+ break;
- ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, err,
- "sendfile() sent only %O bytes", sent);
-
- } else {
+ default:
wev->error = 1;
(void) ngx_connection_error(c, err, "sendfile() failed");
return NGX_CHAIN_ERROR;
}
+
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, err,
+ "sendfile() sent only %O bytes", sent);
}
if (rc == 0 && sent == 0) {
@@ -284,19 +283,22 @@
if (rc == -1) {
err = ngx_errno;
- if (err == NGX_EAGAIN || err == NGX_EINTR) {
- if (err == NGX_EINTR) {
- eintr = 1;
- }
+ switch (err) {
+ case NGX_EAGAIN:
+ break;
- ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
- "writev() not ready");
+ case NGX_EINTR:
+ eintr = 1;
+ break;
- } else {
+ default:
wev->error = 1;
ngx_connection_error(c, err, "writev() failed");
return NGX_CHAIN_ERROR;
}
+
+ ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
+ "writev() not ready");
}
sent = rc > 0 ? rc : 0;
diff --git a/src/os/unix/ngx_freebsd_sendfile_chain.c b/src/os/unix/ngx_freebsd_sendfile_chain.c
index c383fbe..26e3863 100644
--- a/src/os/unix/ngx_freebsd_sendfile_chain.c
+++ b/src/os/unix/ngx_freebsd_sendfile_chain.c
@@ -267,22 +267,23 @@
if (rc == -1) {
err = ngx_errno;
- if (err == NGX_EAGAIN || err == NGX_EINTR) {
- if (err == NGX_EINTR) {
- eintr = 1;
+ switch (err) {
+ case NGX_EAGAIN:
+ eagain = 1;
+ break;
- } else {
- eagain = 1;
- }
+ case NGX_EINTR:
+ eintr = 1;
+ break;
- ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, err,
- "sendfile() sent only %O bytes", sent);
-
- } else {
+ default:
wev->error = 1;
(void) ngx_connection_error(c, err, "sendfile() failed");
return NGX_CHAIN_ERROR;
}
+
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, err,
+ "sendfile() sent only %O bytes", sent);
}
/*
@@ -318,19 +319,22 @@
if (rc == -1) {
err = ngx_errno;
- if (err == NGX_EAGAIN || err == NGX_EINTR) {
- if (err == NGX_EINTR) {
- eintr = 1;
- }
+ switch (err) {
+ case NGX_EAGAIN:
+ break;
- ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
- "writev() not ready");
+ case NGX_EINTR:
+ eintr = 1;
+ break;
- } else {
+ default:
wev->error = 1;
ngx_connection_error(c, err, "writev() failed");
return NGX_CHAIN_ERROR;
}
+
+ ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
+ "writev() not ready");
}
sent = rc > 0 ? rc : 0;
diff --git a/src/os/unix/ngx_linux_sendfile_chain.c b/src/os/unix/ngx_linux_sendfile_chain.c
index e102f27..a2225d9 100644
--- a/src/os/unix/ngx_linux_sendfile_chain.c
+++ b/src/os/unix/ngx_linux_sendfile_chain.c
@@ -263,19 +263,22 @@
if (rc == -1) {
err = ngx_errno;
- if (err == NGX_EAGAIN || err == NGX_EINTR) {
- if (err == NGX_EINTR) {
- eintr = 1;
- }
+ switch (err) {
+ case NGX_EAGAIN:
+ break;
- ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
- "sendfile() is not ready");
+ case NGX_EINTR:
+ eintr = 1;
+ break;
- } else {
+ default:
wev->error = 1;
ngx_connection_error(c, err, "sendfile() failed");
return NGX_CHAIN_ERROR;
}
+
+ ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
+ "sendfile() is not ready");
}
sent = rc > 0 ? rc : 0;
@@ -290,19 +293,22 @@
if (rc == -1) {
err = ngx_errno;
- if (err == NGX_EAGAIN || err == NGX_EINTR) {
- if (err == NGX_EINTR) {
- eintr = 1;
- }
+ switch (err) {
+ case NGX_EAGAIN:
+ break;
- ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
- "writev() not ready");
+ case NGX_EINTR:
+ eintr = 1;
+ break;
- } else {
+ default:
wev->error = 1;
ngx_connection_error(c, err, "writev() failed");
return NGX_CHAIN_ERROR;
}
+
+ ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
+ "writev() not ready");
}
sent = rc > 0 ? rc : 0;
diff --git a/src/os/unix/ngx_solaris_sendfilev_chain.c b/src/os/unix/ngx_solaris_sendfilev_chain.c
index 2feae2f..3a9356c 100644
--- a/src/os/unix/ngx_solaris_sendfilev_chain.c
+++ b/src/os/unix/ngx_solaris_sendfilev_chain.c
@@ -168,19 +168,22 @@
if (n == -1) {
err = ngx_errno;
- if (err == NGX_EAGAIN || err == NGX_EINTR) {
- if (err == NGX_EINTR) {
- eintr = 1;
- }
+ switch (err) {
+ case NGX_EAGAIN:
+ break;
- ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, err,
- "sendfilev() sent only %uz bytes", sent);
+ case NGX_EINTR:
+ eintr = 1;
+ break;
- } else {
+ default:
wev->error = 1;
ngx_connection_error(c, err, "sendfilev() failed");
return NGX_CHAIN_ERROR;
}
+
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, err,
+ "sendfilev() sent only %uz bytes", sent);
}
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,
diff --git a/src/os/unix/ngx_writev_chain.c b/src/os/unix/ngx_writev_chain.c
index b8754cd..695cb49 100644
--- a/src/os/unix/ngx_writev_chain.c
+++ b/src/os/unix/ngx_writev_chain.c
@@ -110,19 +110,22 @@
if (n == -1) {
err = ngx_errno;
- if (err == NGX_EAGAIN || err == NGX_EINTR) {
- if (err == NGX_EINTR) {
- eintr = 1;
- }
+ switch (err) {
+ case NGX_EAGAIN:
+ break;
- ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
- "writev() not ready");
+ case NGX_EINTR:
+ eintr = 1;
+ break;
- } else {
+ default:
wev->error = 1;
(void) ngx_connection_error(c, err, "writev() failed");
return NGX_CHAIN_ERROR;
}
+
+ ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
+ "writev() not ready");
}
sent = n > 0 ? n : 0;