diff src/os/unix/ngx_solaris_sendfilev_chain.c @ 428:5e73d0ea4dab

nginx-0.0.11-2004-09-16-20:10:13 import
author Igor Sysoev <igor@sysoev.ru>
date Thu, 16 Sep 2004 16:10:13 +0000
parents 7650aea1816f
children 9a97dcdd2421
line wrap: on
line diff
--- a/src/os/unix/ngx_solaris_sendfilev_chain.c
+++ b/src/os/unix/ngx_solaris_sendfilev_chain.c
@@ -9,6 +9,9 @@
 #include <ngx_event.h>
 
 
+#define NGX_SENDFILEVECS   16
+
+
 ngx_chain_t *ngx_solaris_sendfilev_chain(ngx_connection_t *c, ngx_chain_t *in,
                                          off_t limit)
 {
@@ -19,7 +22,7 @@ ngx_chain_t *ngx_solaris_sendfilev_chain
     ssize_t         n;
     ngx_int_t       eintr, complete;
     ngx_err_t       err;
-    sendfilevec_t  *sfv;
+    sendfilevec_t  *sfv, sfvs[NGX_SENDFILEVECS];
     ngx_array_t     vec;
     ngx_event_t    *wev;
     ngx_chain_t    *cl, *tail;
@@ -33,6 +36,11 @@ ngx_chain_t *ngx_solaris_sendfilev_chain
     send = 0;
     complete = 0;
 
+    vec.elts = sfvs;
+    vec.size = sizeof(sendfilevec_t);
+    vec.nalloc = NGX_SENDFILEVECS;
+    vec.pool = c->pool;
+
     for ( ;; ) {
         fd = SFV_FD_SELF;
         prev = NULL;
@@ -42,8 +50,7 @@ ngx_chain_t *ngx_solaris_sendfilev_chain
         sent = 0;
         sprev = send;
 
-        ngx_init_array(vec, c->pool, 10, sizeof(sendfilevec_t),
-                       NGX_CHAIN_ERROR);
+        vec.nelts = 0;
 
         /* create the sendfilevec and coalesce the neighbouring bufs */
 
@@ -66,7 +73,10 @@ ngx_chain_t *ngx_solaris_sendfilev_chain
                     sfv->sfv_len += size;
 
                 } else {
-                    ngx_test_null(sfv, ngx_push_array(&vec), NGX_CHAIN_ERROR);
+                    if (!(sfv = ngx_array_push(&vec))) {
+                        return NGX_CHAIN_ERROR;
+                    }
+
                     sfv->sfv_fd = SFV_FD_SELF;
                     sfv->sfv_flag = 0;
                     sfv->sfv_off = (off_t) (uintptr_t) cl->buf->pos;
@@ -96,7 +106,10 @@ ngx_chain_t *ngx_solaris_sendfilev_chain
                     sfv->sfv_len += size;
 
                 } else {
-                    ngx_test_null(sfv, ngx_push_array(&vec), NGX_CHAIN_ERROR);
+                    if (!(sfv = ngx_array_push(&vec))) {
+                        return NGX_CHAIN_ERROR;
+                    }
+
                     fd = cl->buf->file->fd;
                     sfv->sfv_fd = fd;
                     sfv->sfv_flag = 0;