]> git.kaiwu.me - nginx.git/commitdiff
Moved the code for adjusting sent buffers in a separate function.
authorValentin Bartenev <vbart@nginx.com>
Wed, 13 Aug 2014 11:11:45 +0000 (15:11 +0400)
committerValentin Bartenev <vbart@nginx.com>
Wed, 13 Aug 2014 11:11:45 +0000 (15:11 +0400)
src/core/ngx_buf.c
src/core/ngx_buf.h
src/os/unix/ngx_darwin_sendfile_chain.c
src/os/unix/ngx_freebsd_sendfile_chain.c
src/os/unix/ngx_linux_sendfile_chain.c
src/os/unix/ngx_solaris_sendfilev_chain.c
src/os/unix/ngx_writev_chain.c
src/os/win32/ngx_wsasend_chain.c

index 835c76ced6b5d8a9cb188f89805a1d99b842fdf9..94a3d3f10bcf10031897e5c7745d676c8c5e4100 100644 (file)
@@ -218,3 +218,49 @@ ngx_chain_update_chains(ngx_pool_t *p, ngx_chain_t **free, ngx_chain_t **busy,
         *free = cl;
     }
 }
+
+
+ngx_chain_t *
+ngx_handle_sent_chain(ngx_chain_t *in, off_t sent)
+{
+    off_t  size;
+
+    for ( /* void */ ; in; in = in->next) {
+
+        if (ngx_buf_special(in->buf)) {
+            continue;
+        }
+
+        if (sent == 0) {
+            break;
+        }
+
+        size = ngx_buf_size(in->buf);
+
+        if (sent >= size) {
+            sent -= size;
+
+            if (ngx_buf_in_memory(in->buf)) {
+                in->buf->pos = in->buf->last;
+            }
+
+            if (in->buf->in_file) {
+                in->buf->file_pos = in->buf->file_last;
+            }
+
+            continue;
+        }
+
+        if (ngx_buf_in_memory(in->buf)) {
+            in->buf->pos += (size_t) sent;
+        }
+
+        if (in->buf->in_file) {
+            in->buf->file_pos += sent;
+        }
+
+        break;
+    }
+
+    return in;
+}
index ffc53109433d66480bdcb13a46edb0339ae9786b..cc28a3e15c7ba98c2b6d654bd3e790b77e9464f1 100644 (file)
@@ -158,5 +158,6 @@ ngx_chain_t *ngx_chain_get_free_buf(ngx_pool_t *p, ngx_chain_t **free);
 void ngx_chain_update_chains(ngx_pool_t *p, ngx_chain_t **free,
     ngx_chain_t **busy, ngx_chain_t **out, ngx_buf_tag_t tag);
 
+ngx_chain_t *ngx_handle_sent_chain(ngx_chain_t *in, off_t sent);
 
 #endif /* _NGX_BUF_H_INCLUDED_ */
index 068add959a073e961b822d68b42f35373dbb76ba..b82800e7897293c44ea376f8e2b90041fb20bfd9 100644 (file)
@@ -317,42 +317,7 @@ ngx_darwin_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
 
         c->sent += sent;
 
-        for ( /* void */ ; in; in = in->next) {
-
-            if (ngx_buf_special(in->buf)) {
-                continue;
-            }
-
-            if (sent == 0) {
-                break;
-            }
-
-            size = ngx_buf_size(in->buf);
-
-            if (sent >= size) {
-                sent -= size;
-
-                if (ngx_buf_in_memory(in->buf)) {
-                    in->buf->pos = in->buf->last;
-                }
-
-                if (in->buf->in_file) {
-                    in->buf->file_pos = in->buf->file_last;
-                }
-
-                continue;
-            }
-
-            if (ngx_buf_in_memory(in->buf)) {
-                in->buf->pos += (size_t) sent;
-            }
-
-            if (in->buf->in_file) {
-                in->buf->file_pos += sent;
-            }
-
-            break;
-        }
+        in = ngx_handle_sent_chain(in, sent);
 
         if (eintr) {
             continue;
index 6491e928fe5f6502d944b6ed58f6de53cb07deb4..0abbdb34934aa48b280d3bbe3026d71806663a18 100644 (file)
@@ -368,42 +368,7 @@ ngx_freebsd_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
 
         c->sent += sent;
 
-        for ( /* void */ ; in; in = in->next) {
-
-            if (ngx_buf_special(in->buf)) {
-                continue;
-            }
-
-            if (sent == 0) {
-                break;
-            }
-
-            size = ngx_buf_size(in->buf);
-
-            if (sent >= size) {
-                sent -= size;
-
-                if (ngx_buf_in_memory(in->buf)) {
-                    in->buf->pos = in->buf->last;
-                }
-
-                if (in->buf->in_file) {
-                    in->buf->file_pos = in->buf->file_last;
-                }
-
-                continue;
-            }
-
-            if (ngx_buf_in_memory(in->buf)) {
-                in->buf->pos += (size_t) sent;
-            }
-
-            if (in->buf->in_file) {
-                in->buf->file_pos += sent;
-            }
-
-            break;
-        }
+        in = ngx_handle_sent_chain(in, sent);
 
 #if (NGX_HAVE_AIO_SENDFILE)
         if (c->busy_sendfile) {
index 16395f9433701a940910410cc4e08ca7e1fc4eb8..3e6fc6dd8bd13a7adbe7ba74cba9409a518a549e 100644 (file)
@@ -325,42 +325,7 @@ ngx_linux_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
 
         c->sent += sent;
 
-        for ( /* void */ ; in; in = in->next) {
-
-            if (ngx_buf_special(in->buf)) {
-                continue;
-            }
-
-            if (sent == 0) {
-                break;
-            }
-
-            size = ngx_buf_size(in->buf);
-
-            if (sent >= size) {
-                sent -= size;
-
-                if (ngx_buf_in_memory(in->buf)) {
-                    in->buf->pos = in->buf->last;
-                }
-
-                if (in->buf->in_file) {
-                    in->buf->file_pos = in->buf->file_last;
-                }
-
-                continue;
-            }
-
-            if (ngx_buf_in_memory(in->buf)) {
-                in->buf->pos += (size_t) sent;
-            }
-
-            if (in->buf->in_file) {
-                in->buf->file_pos += sent;
-            }
-
-            break;
-        }
+        in = ngx_handle_sent_chain(in, sent);
 
         if (eintr) {
             continue;
index 37bb09d961ad583e87589bf4c1dea1f0cb564f7f..76e8728e438e8a1cae41ae3739f50496d9dc22b3 100644 (file)
@@ -207,42 +207,7 @@ ngx_solaris_sendfilev_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
 
         c->sent += sent;
 
-        for ( /* void */ ; in; in = in->next) {
-
-            if (ngx_buf_special(in->buf)) {
-                continue;
-            }
-
-            if (sent == 0) {
-                break;
-            }
-
-            size = ngx_buf_size(in->buf);
-
-            if ((off_t) sent >= size) {
-                sent = (size_t) ((off_t) sent - size);
-
-                if (ngx_buf_in_memory(in->buf)) {
-                    in->buf->pos = in->buf->last;
-                }
-
-                if (in->buf->in_file) {
-                    in->buf->file_pos = in->buf->file_last;
-                }
-
-                continue;
-            }
-
-            if (ngx_buf_in_memory(in->buf)) {
-                in->buf->pos += sent;
-            }
-
-            if (in->buf->in_file) {
-                in->buf->file_pos += sent;
-            }
-
-            break;
-        }
+        in = ngx_handle_sent_chain(in, sent);
 
         if (eintr) {
             continue;
index 805982d6558404f5629219da0fbf07c11ce3b04e..ff16f86e307001b3eea41fb466494a10f6a79be1 100644 (file)
@@ -143,29 +143,7 @@ ngx_writev_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
 
         c->sent += sent;
 
-        for (cl = in; cl; cl = cl->next) {
-
-            if (ngx_buf_special(cl->buf)) {
-                continue;
-            }
-
-            if (sent == 0) {
-                break;
-            }
-
-            size = cl->buf->last - cl->buf->pos;
-
-            if (sent >= size) {
-                sent -= size;
-                cl->buf->pos = cl->buf->last;
-
-                continue;
-            }
-
-            cl->buf->pos += sent;
-
-            break;
-        }
+        cl = ngx_handle_sent_chain(in, sent);
 
         if (eintr) {
             continue;
index fa7377607d47bab45267f6e512ec3fdb067cd26f..a818fe1f9c387ccdb16006da0c76dd60acbf471f 100644 (file)
@@ -119,29 +119,7 @@ ngx_wsasend_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
 
         c->sent += sent;
 
-        for (cl = in; cl; cl = cl->next) {
-
-            if (ngx_buf_special(cl->buf)) {
-                continue;
-            }
-
-            if (sent == 0) {
-                break;
-            }
-
-            size = cl->buf->last - cl->buf->pos;
-
-            if (sent >= size) {
-                sent -= size;
-                cl->buf->pos = cl->buf->last;
-
-                continue;
-            }
-
-            cl->buf->pos += sent;
-
-            break;
-        }
+        cl = ngx_handle_sent_chain(in, sent);
 
         if (!complete) {
             wev->ready = 0;
@@ -308,28 +286,7 @@ ngx_overlapped_wsasend_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
 
     c->sent += sent;
 
-    for (cl = in; cl && sent > 0; cl = cl->next) {
-        if (ngx_buf_special(cl->buf)) {
-            continue;
-        }
-
-        if (sent == 0) {
-            break;
-        }
-
-        size = cl->buf->last - cl->buf->pos;
-
-        if (sent >= size) {
-            sent -= size;
-            cl->buf->pos = cl->buf->last;
-
-            continue;
-        }
-
-        cl->buf->pos += sent;
-
-        break;
-    }
+    cl = ngx_handle_sent_chain(in, sent);
 
     if (cl) {
         wev->ready = 0;