mirror of
https://github.com/nginx/nginx.git
synced 2024-12-12 02:09:04 +08:00
IOV_MAX handling microoptimization.
We now stop on IOV_MAX iovec entries only if we are going to add new one, i.e. next buffer can't be coalesced into last iovec. This also fixes incorrect checks for trailer creation on FreeBSD and Mac OS X, header.nelts was checked instead of trailer.nelts.
This commit is contained in:
parent
96d73e291f
commit
578c02f3a1
@ -103,10 +103,8 @@ ngx_darwin_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
||||
prev = NULL;
|
||||
iov = NULL;
|
||||
|
||||
for (cl = in;
|
||||
cl && header.nelts < IOV_MAX && send < limit;
|
||||
cl = cl->next)
|
||||
{
|
||||
for (cl = in; cl && send < limit; cl = cl->next) {
|
||||
|
||||
if (ngx_buf_special(cl->buf)) {
|
||||
continue;
|
||||
}
|
||||
@ -125,6 +123,10 @@ ngx_darwin_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
||||
iov->iov_len += (size_t) size;
|
||||
|
||||
} else {
|
||||
if (header.nelts >= IOV_MAX) {
|
||||
break;
|
||||
}
|
||||
|
||||
iov = ngx_array_push(&header);
|
||||
if (iov == NULL) {
|
||||
return NGX_CHAIN_ERROR;
|
||||
@ -178,7 +180,7 @@ ngx_darwin_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
||||
prev = NULL;
|
||||
iov = NULL;
|
||||
|
||||
while (cl && header.nelts < IOV_MAX && send < limit) {
|
||||
while (cl && send < limit) {
|
||||
|
||||
if (ngx_buf_special(cl->buf)) {
|
||||
cl = cl->next;
|
||||
@ -199,6 +201,10 @@ ngx_darwin_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
||||
iov->iov_len += (size_t) size;
|
||||
|
||||
} else {
|
||||
if (trailer.nelts >= IOV_MAX) {
|
||||
break;
|
||||
}
|
||||
|
||||
iov = ngx_array_push(&trailer);
|
||||
if (iov == NULL) {
|
||||
return NGX_CHAIN_ERROR;
|
||||
|
@ -107,10 +107,8 @@ ngx_freebsd_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
||||
prev = NULL;
|
||||
iov = NULL;
|
||||
|
||||
for (cl = in;
|
||||
cl && header.nelts < IOV_MAX && send < limit;
|
||||
cl = cl->next)
|
||||
{
|
||||
for (cl = in; cl && send < limit; cl = cl->next) {
|
||||
|
||||
if (ngx_buf_special(cl->buf)) {
|
||||
continue;
|
||||
}
|
||||
@ -129,6 +127,10 @@ ngx_freebsd_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
||||
iov->iov_len += (size_t) size;
|
||||
|
||||
} else {
|
||||
if (header.nelts >= IOV_MAX){
|
||||
break;
|
||||
}
|
||||
|
||||
iov = ngx_array_push(&header);
|
||||
if (iov == NULL) {
|
||||
return NGX_CHAIN_ERROR;
|
||||
@ -183,7 +185,7 @@ ngx_freebsd_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
||||
prev = NULL;
|
||||
iov = NULL;
|
||||
|
||||
while (cl && header.nelts < IOV_MAX && send < limit) {
|
||||
while (cl && send < limit) {
|
||||
|
||||
if (ngx_buf_special(cl->buf)) {
|
||||
cl = cl->next;
|
||||
@ -204,6 +206,10 @@ ngx_freebsd_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
||||
iov->iov_len += (size_t) size;
|
||||
|
||||
} else {
|
||||
if (trailer.nelts >= IOV_MAX){
|
||||
break;
|
||||
}
|
||||
|
||||
iov = ngx_array_push(&trailer);
|
||||
if (iov == NULL) {
|
||||
return NGX_CHAIN_ERROR;
|
||||
|
@ -89,10 +89,8 @@ ngx_linux_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
||||
|
||||
/* create the iovec and coalesce the neighbouring bufs */
|
||||
|
||||
for (cl = in;
|
||||
cl && header.nelts < IOV_MAX && send < limit;
|
||||
cl = cl->next)
|
||||
{
|
||||
for (cl = in; cl && send < limit; cl = cl->next) {
|
||||
|
||||
if (ngx_buf_special(cl->buf)) {
|
||||
continue;
|
||||
}
|
||||
@ -132,6 +130,10 @@ ngx_linux_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
||||
iov->iov_len += (size_t) size;
|
||||
|
||||
} else {
|
||||
if (header.nelts >= IOV_MAX) {
|
||||
break;
|
||||
}
|
||||
|
||||
iov = ngx_array_push(&header);
|
||||
if (iov == NULL) {
|
||||
return NGX_CHAIN_ERROR;
|
||||
|
@ -94,8 +94,8 @@ ngx_solaris_sendfilev_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
||||
|
||||
/* create the sendfilevec and coalesce the neighbouring bufs */
|
||||
|
||||
for (cl = in; cl && vec.nelts < IOV_MAX && send < limit; cl = cl->next)
|
||||
{
|
||||
for (cl = in; cl && send < limit; cl = cl->next) {
|
||||
|
||||
if (ngx_buf_special(cl->buf)) {
|
||||
continue;
|
||||
}
|
||||
@ -113,6 +113,10 @@ ngx_solaris_sendfilev_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
||||
sfv->sfv_len += (size_t) size;
|
||||
|
||||
} else {
|
||||
if (vec.nelts >= IOV_MAX) {
|
||||
break;
|
||||
}
|
||||
|
||||
sfv = ngx_array_push(&vec);
|
||||
if (sfv == NULL) {
|
||||
return NGX_CHAIN_ERROR;
|
||||
@ -147,6 +151,10 @@ ngx_solaris_sendfilev_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
||||
sfv->sfv_len += (size_t) size;
|
||||
|
||||
} else {
|
||||
if (vec.nelts >= IOV_MAX) {
|
||||
break;
|
||||
}
|
||||
|
||||
sfv = ngx_array_push(&vec);
|
||||
if (sfv == NULL) {
|
||||
return NGX_CHAIN_ERROR;
|
||||
|
@ -71,8 +71,8 @@ ngx_writev_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
||||
|
||||
/* create the iovec and coalesce the neighbouring bufs */
|
||||
|
||||
for (cl = in; cl && vec.nelts < IOV_MAX && send < limit; cl = cl->next)
|
||||
{
|
||||
for (cl = in; cl && send < limit; cl = cl->next) {
|
||||
|
||||
if (ngx_buf_special(cl->buf)) {
|
||||
continue;
|
||||
}
|
||||
@ -93,6 +93,10 @@ ngx_writev_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
||||
iov->iov_len += size;
|
||||
|
||||
} else {
|
||||
if (vec.nelts >= IOV_MAX) {
|
||||
break;
|
||||
}
|
||||
|
||||
iov = ngx_array_push(&vec);
|
||||
if (iov == NULL) {
|
||||
return NGX_CHAIN_ERROR;
|
||||
|
Loading…
Reference in New Issue
Block a user