Win32: use only preallocated memory in send/recv chain functions.
The ngx_wsasend_chain() and ngx_wsarecv_chain() functions were modified to use only preallocated memory, and the number of preallocated wsabufs was increased to 64.
This commit is contained in:
parent
b20768e61c
commit
b445d1884f
@ -10,7 +10,7 @@
|
|||||||
#include <ngx_event.h>
|
#include <ngx_event.h>
|
||||||
|
|
||||||
|
|
||||||
#define NGX_WSABUFS 8
|
#define NGX_WSABUFS 64
|
||||||
|
|
||||||
|
|
||||||
ssize_t
|
ssize_t
|
||||||
@ -57,6 +57,10 @@ ngx_wsarecv_chain(ngx_connection_t *c, ngx_chain_t *chain, off_t limit)
|
|||||||
wsabuf->len += n;
|
wsabuf->len += n;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
if (vec.nelts == vec.nalloc) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
wsabuf = ngx_array_push(&vec);
|
wsabuf = ngx_array_push(&vec);
|
||||||
if (wsabuf == NULL) {
|
if (wsabuf == NULL) {
|
||||||
return NGX_ERROR;
|
return NGX_ERROR;
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
#include <ngx_event.h>
|
#include <ngx_event.h>
|
||||||
|
|
||||||
|
|
||||||
#define NGX_WSABUFS 8
|
#define NGX_WSABUFS 64
|
||||||
|
|
||||||
|
|
||||||
ngx_chain_t *
|
ngx_chain_t *
|
||||||
@ -47,7 +47,7 @@ ngx_wsasend_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
|||||||
|
|
||||||
vec.elts = wsabufs;
|
vec.elts = wsabufs;
|
||||||
vec.size = sizeof(WSABUF);
|
vec.size = sizeof(WSABUF);
|
||||||
vec.nalloc = NGX_WSABUFS;
|
vec.nalloc = ngx_min(NGX_WSABUFS, ngx_max_wsabufs);
|
||||||
vec.pool = c->pool;
|
vec.pool = c->pool;
|
||||||
|
|
||||||
for ( ;; ) {
|
for ( ;; ) {
|
||||||
@ -59,10 +59,8 @@ ngx_wsasend_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
|||||||
|
|
||||||
/* create the WSABUF and coalesce the neighbouring bufs */
|
/* create the WSABUF and coalesce the neighbouring bufs */
|
||||||
|
|
||||||
for (cl = in;
|
for (cl = in; cl && send < limit; cl = cl->next) {
|
||||||
cl && vec.nelts < ngx_max_wsabufs && send < limit;
|
|
||||||
cl = cl->next)
|
|
||||||
{
|
|
||||||
if (ngx_buf_special(cl->buf)) {
|
if (ngx_buf_special(cl->buf)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -77,6 +75,10 @@ ngx_wsasend_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
|||||||
wsabuf->len += cl->buf->last - cl->buf->pos;
|
wsabuf->len += cl->buf->last - cl->buf->pos;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
if (vec.nelts == vec.nalloc) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
wsabuf = ngx_array_push(&vec);
|
wsabuf = ngx_array_push(&vec);
|
||||||
if (wsabuf == NULL) {
|
if (wsabuf == NULL) {
|
||||||
return NGX_CHAIN_ERROR;
|
return NGX_CHAIN_ERROR;
|
||||||
@ -169,7 +171,7 @@ ngx_overlapped_wsasend_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
|||||||
vec.elts = wsabufs;
|
vec.elts = wsabufs;
|
||||||
vec.nelts = 0;
|
vec.nelts = 0;
|
||||||
vec.size = sizeof(WSABUF);
|
vec.size = sizeof(WSABUF);
|
||||||
vec.nalloc = NGX_WSABUFS;
|
vec.nalloc = ngx_min(NGX_WSABUFS, ngx_max_wsabufs);
|
||||||
vec.pool = c->pool;
|
vec.pool = c->pool;
|
||||||
|
|
||||||
send = 0;
|
send = 0;
|
||||||
@ -178,10 +180,8 @@ ngx_overlapped_wsasend_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
|||||||
|
|
||||||
/* create the WSABUF and coalesce the neighbouring bufs */
|
/* create the WSABUF and coalesce the neighbouring bufs */
|
||||||
|
|
||||||
for (cl = in;
|
for (cl = in; cl && send < limit; cl = cl->next) {
|
||||||
cl && vec.nelts < ngx_max_wsabufs && send < limit;
|
|
||||||
cl = cl->next)
|
|
||||||
{
|
|
||||||
if (ngx_buf_special(cl->buf)) {
|
if (ngx_buf_special(cl->buf)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -196,6 +196,10 @@ ngx_overlapped_wsasend_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
|||||||
wsabuf->len += cl->buf->last - cl->buf->pos;
|
wsabuf->len += cl->buf->last - cl->buf->pos;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
if (vec.nelts == vec.nalloc) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
wsabuf = ngx_array_push(&vec);
|
wsabuf = ngx_array_push(&vec);
|
||||||
if (wsabuf == NULL) {
|
if (wsabuf == NULL) {
|
||||||
return NGX_CHAIN_ERROR;
|
return NGX_CHAIN_ERROR;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user