mirror of
https://github.com/nginx/nginx.git
synced 2025-06-07 17:52:38 +08:00
refactor EAGAIN/EINTR processing
This commit is contained in:
parent
d11fa717f0
commit
8c491a77bc
@ -42,7 +42,7 @@ ngx_darwin_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
|||||||
u_char *prev;
|
u_char *prev;
|
||||||
off_t size, send, prev_send, aligned, sent, fprev;
|
off_t size, send, prev_send, aligned, sent, fprev;
|
||||||
off_t header_size, file_size;
|
off_t header_size, file_size;
|
||||||
ngx_uint_t eintr, eagain, complete;
|
ngx_uint_t eintr, complete;
|
||||||
ngx_err_t err;
|
ngx_err_t err;
|
||||||
ngx_buf_t *file;
|
ngx_buf_t *file;
|
||||||
ngx_array_t header, trailer;
|
ngx_array_t header, trailer;
|
||||||
@ -75,7 +75,6 @@ ngx_darwin_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
|||||||
}
|
}
|
||||||
|
|
||||||
send = 0;
|
send = 0;
|
||||||
eagain = 0;
|
|
||||||
|
|
||||||
header.elts = headers;
|
header.elts = headers;
|
||||||
header.size = sizeof(struct iovec);
|
header.size = sizeof(struct iovec);
|
||||||
@ -238,22 +237,22 @@ ngx_darwin_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
|||||||
if (rc == -1) {
|
if (rc == -1) {
|
||||||
err = ngx_errno;
|
err = ngx_errno;
|
||||||
|
|
||||||
if (err == NGX_EAGAIN || err == NGX_EINTR) {
|
switch (err) {
|
||||||
if (err == NGX_EINTR) {
|
case NGX_EAGAIN:
|
||||||
eintr = 1;
|
break;
|
||||||
|
|
||||||
} else {
|
case NGX_EINTR:
|
||||||
eagain = 1;
|
eintr = 1;
|
||||||
}
|
break;
|
||||||
|
|
||||||
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, err,
|
default:
|
||||||
"sendfile() sent only %O bytes", sent);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
wev->error = 1;
|
wev->error = 1;
|
||||||
(void) ngx_connection_error(c, err, "sendfile() failed");
|
(void) ngx_connection_error(c, err, "sendfile() failed");
|
||||||
return NGX_CHAIN_ERROR;
|
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) {
|
if (rc == 0 && sent == 0) {
|
||||||
@ -284,19 +283,22 @@ ngx_darwin_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
|||||||
if (rc == -1) {
|
if (rc == -1) {
|
||||||
err = ngx_errno;
|
err = ngx_errno;
|
||||||
|
|
||||||
if (err == NGX_EAGAIN || err == NGX_EINTR) {
|
switch (err) {
|
||||||
if (err == NGX_EINTR) {
|
case NGX_EAGAIN:
|
||||||
eintr = 1;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
|
case NGX_EINTR:
|
||||||
"writev() not ready");
|
eintr = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
} else {
|
default:
|
||||||
wev->error = 1;
|
wev->error = 1;
|
||||||
ngx_connection_error(c, err, "writev() failed");
|
ngx_connection_error(c, err, "writev() failed");
|
||||||
return NGX_CHAIN_ERROR;
|
return NGX_CHAIN_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
|
||||||
|
"writev() not ready");
|
||||||
}
|
}
|
||||||
|
|
||||||
sent = rc > 0 ? rc : 0;
|
sent = rc > 0 ? rc : 0;
|
||||||
|
@ -267,22 +267,23 @@ ngx_freebsd_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
|||||||
if (rc == -1) {
|
if (rc == -1) {
|
||||||
err = ngx_errno;
|
err = ngx_errno;
|
||||||
|
|
||||||
if (err == NGX_EAGAIN || err == NGX_EINTR) {
|
switch (err) {
|
||||||
if (err == NGX_EINTR) {
|
case NGX_EAGAIN:
|
||||||
eintr = 1;
|
eagain = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
} else {
|
case NGX_EINTR:
|
||||||
eagain = 1;
|
eintr = 1;
|
||||||
}
|
break;
|
||||||
|
|
||||||
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, err,
|
default:
|
||||||
"sendfile() sent only %O bytes", sent);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
wev->error = 1;
|
wev->error = 1;
|
||||||
(void) ngx_connection_error(c, err, "sendfile() failed");
|
(void) ngx_connection_error(c, err, "sendfile() failed");
|
||||||
return NGX_CHAIN_ERROR;
|
return NGX_CHAIN_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, err,
|
||||||
|
"sendfile() sent only %O bytes", sent);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -318,19 +319,22 @@ ngx_freebsd_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
|||||||
if (rc == -1) {
|
if (rc == -1) {
|
||||||
err = ngx_errno;
|
err = ngx_errno;
|
||||||
|
|
||||||
if (err == NGX_EAGAIN || err == NGX_EINTR) {
|
switch (err) {
|
||||||
if (err == NGX_EINTR) {
|
case NGX_EAGAIN:
|
||||||
eintr = 1;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
|
case NGX_EINTR:
|
||||||
"writev() not ready");
|
eintr = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
} else {
|
default:
|
||||||
wev->error = 1;
|
wev->error = 1;
|
||||||
ngx_connection_error(c, err, "writev() failed");
|
ngx_connection_error(c, err, "writev() failed");
|
||||||
return NGX_CHAIN_ERROR;
|
return NGX_CHAIN_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
|
||||||
|
"writev() not ready");
|
||||||
}
|
}
|
||||||
|
|
||||||
sent = rc > 0 ? rc : 0;
|
sent = rc > 0 ? rc : 0;
|
||||||
|
@ -263,19 +263,22 @@ ngx_linux_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
|||||||
if (rc == -1) {
|
if (rc == -1) {
|
||||||
err = ngx_errno;
|
err = ngx_errno;
|
||||||
|
|
||||||
if (err == NGX_EAGAIN || err == NGX_EINTR) {
|
switch (err) {
|
||||||
if (err == NGX_EINTR) {
|
case NGX_EAGAIN:
|
||||||
eintr = 1;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
|
case NGX_EINTR:
|
||||||
"sendfile() is not ready");
|
eintr = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
} else {
|
default:
|
||||||
wev->error = 1;
|
wev->error = 1;
|
||||||
ngx_connection_error(c, err, "sendfile() failed");
|
ngx_connection_error(c, err, "sendfile() failed");
|
||||||
return NGX_CHAIN_ERROR;
|
return NGX_CHAIN_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
|
||||||
|
"sendfile() is not ready");
|
||||||
}
|
}
|
||||||
|
|
||||||
sent = rc > 0 ? rc : 0;
|
sent = rc > 0 ? rc : 0;
|
||||||
@ -290,19 +293,22 @@ ngx_linux_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
|||||||
if (rc == -1) {
|
if (rc == -1) {
|
||||||
err = ngx_errno;
|
err = ngx_errno;
|
||||||
|
|
||||||
if (err == NGX_EAGAIN || err == NGX_EINTR) {
|
switch (err) {
|
||||||
if (err == NGX_EINTR) {
|
case NGX_EAGAIN:
|
||||||
eintr = 1;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
|
case NGX_EINTR:
|
||||||
"writev() not ready");
|
eintr = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
} else {
|
default:
|
||||||
wev->error = 1;
|
wev->error = 1;
|
||||||
ngx_connection_error(c, err, "writev() failed");
|
ngx_connection_error(c, err, "writev() failed");
|
||||||
return NGX_CHAIN_ERROR;
|
return NGX_CHAIN_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
|
||||||
|
"writev() not ready");
|
||||||
}
|
}
|
||||||
|
|
||||||
sent = rc > 0 ? rc : 0;
|
sent = rc > 0 ? rc : 0;
|
||||||
|
@ -168,19 +168,22 @@ ngx_solaris_sendfilev_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
|||||||
if (n == -1) {
|
if (n == -1) {
|
||||||
err = ngx_errno;
|
err = ngx_errno;
|
||||||
|
|
||||||
if (err == NGX_EAGAIN || err == NGX_EINTR) {
|
switch (err) {
|
||||||
if (err == NGX_EINTR) {
|
case NGX_EAGAIN:
|
||||||
eintr = 1;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, err,
|
case NGX_EINTR:
|
||||||
"sendfilev() sent only %uz bytes", sent);
|
eintr = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
} else {
|
default:
|
||||||
wev->error = 1;
|
wev->error = 1;
|
||||||
ngx_connection_error(c, err, "sendfilev() failed");
|
ngx_connection_error(c, err, "sendfilev() failed");
|
||||||
return NGX_CHAIN_ERROR;
|
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,
|
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,
|
||||||
|
@ -110,19 +110,22 @@ ngx_writev_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
|||||||
if (n == -1) {
|
if (n == -1) {
|
||||||
err = ngx_errno;
|
err = ngx_errno;
|
||||||
|
|
||||||
if (err == NGX_EAGAIN || err == NGX_EINTR) {
|
switch (err) {
|
||||||
if (err == NGX_EINTR) {
|
case NGX_EAGAIN:
|
||||||
eintr = 1;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
|
case NGX_EINTR:
|
||||||
"writev() not ready");
|
eintr = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
} else {
|
default:
|
||||||
wev->error = 1;
|
wev->error = 1;
|
||||||
(void) ngx_connection_error(c, err, "writev() failed");
|
(void) ngx_connection_error(c, err, "writev() failed");
|
||||||
return NGX_CHAIN_ERROR;
|
return NGX_CHAIN_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
|
||||||
|
"writev() not ready");
|
||||||
}
|
}
|
||||||
|
|
||||||
sent = n > 0 ? n : 0;
|
sent = n > 0 ? n : 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user