Changeset 5850:f9c83484d9ce in nginx


Ignore:
Timestamp:
08/13/14 11:11:45 (6 years ago)
Author:
Valentin Bartenev <vbart@…>
Branch:
default
Phase:
public
Message:

Moved the code for adjusting sent buffers in a separate function.

Location:
src
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • src/core/ngx_buf.c

    r4412 r5850  
    219219    }
    220220}
     221
     222
     223ngx_chain_t *
     224ngx_handle_sent_chain(ngx_chain_t *in, off_t sent)
     225{
     226    off_t  size;
     227
     228    for ( /* void */ ; in; in = in->next) {
     229
     230        if (ngx_buf_special(in->buf)) {
     231            continue;
     232        }
     233
     234        if (sent == 0) {
     235            break;
     236        }
     237
     238        size = ngx_buf_size(in->buf);
     239
     240        if (sent >= size) {
     241            sent -= size;
     242
     243            if (ngx_buf_in_memory(in->buf)) {
     244                in->buf->pos = in->buf->last;
     245            }
     246
     247            if (in->buf->in_file) {
     248                in->buf->file_pos = in->buf->file_last;
     249            }
     250
     251            continue;
     252        }
     253
     254        if (ngx_buf_in_memory(in->buf)) {
     255            in->buf->pos += (size_t) sent;
     256        }
     257
     258        if (in->buf->in_file) {
     259            in->buf->file_pos += sent;
     260        }
     261
     262        break;
     263    }
     264
     265    return in;
     266}
  • src/core/ngx_buf.h

    r4412 r5850  
    159159    ngx_chain_t **busy, ngx_chain_t **out, ngx_buf_tag_t tag);
    160160
     161ngx_chain_t *ngx_handle_sent_chain(ngx_chain_t *in, off_t sent);
    161162
    162163#endif /* _NGX_BUF_H_INCLUDED_ */
  • src/os/unix/ngx_darwin_sendfile_chain.c

    r5849 r5850  
    318318        c->sent += sent;
    319319
    320         for ( /* void */ ; in; in = in->next) {
    321 
    322             if (ngx_buf_special(in->buf)) {
    323                 continue;
    324             }
    325 
    326             if (sent == 0) {
    327                 break;
    328             }
    329 
    330             size = ngx_buf_size(in->buf);
    331 
    332             if (sent >= size) {
    333                 sent -= size;
    334 
    335                 if (ngx_buf_in_memory(in->buf)) {
    336                     in->buf->pos = in->buf->last;
    337                 }
    338 
    339                 if (in->buf->in_file) {
    340                     in->buf->file_pos = in->buf->file_last;
    341                 }
    342 
    343                 continue;
    344             }
    345 
    346             if (ngx_buf_in_memory(in->buf)) {
    347                 in->buf->pos += (size_t) sent;
    348             }
    349 
    350             if (in->buf->in_file) {
    351                 in->buf->file_pos += sent;
    352             }
    353 
    354             break;
    355         }
     320        in = ngx_handle_sent_chain(in, sent);
    356321
    357322        if (eintr) {
  • src/os/unix/ngx_freebsd_sendfile_chain.c

    r5727 r5850  
    369369        c->sent += sent;
    370370
    371         for ( /* void */ ; in; in = in->next) {
    372 
    373             if (ngx_buf_special(in->buf)) {
    374                 continue;
    375             }
    376 
    377             if (sent == 0) {
    378                 break;
    379             }
    380 
    381             size = ngx_buf_size(in->buf);
    382 
    383             if (sent >= size) {
    384                 sent -= size;
    385 
    386                 if (ngx_buf_in_memory(in->buf)) {
    387                     in->buf->pos = in->buf->last;
    388                 }
    389 
    390                 if (in->buf->in_file) {
    391                     in->buf->file_pos = in->buf->file_last;
    392                 }
    393 
    394                 continue;
    395             }
    396 
    397             if (ngx_buf_in_memory(in->buf)) {
    398                 in->buf->pos += (size_t) sent;
    399             }
    400 
    401             if (in->buf->in_file) {
    402                 in->buf->file_pos += sent;
    403             }
    404 
    405             break;
    406         }
     371        in = ngx_handle_sent_chain(in, sent);
    407372
    408373#if (NGX_HAVE_AIO_SENDFILE)
  • src/os/unix/ngx_linux_sendfile_chain.c

    r5557 r5850  
    326326        c->sent += sent;
    327327
    328         for ( /* void */ ; in; in = in->next) {
    329 
    330             if (ngx_buf_special(in->buf)) {
    331                 continue;
    332             }
    333 
    334             if (sent == 0) {
    335                 break;
    336             }
    337 
    338             size = ngx_buf_size(in->buf);
    339 
    340             if (sent >= size) {
    341                 sent -= size;
    342 
    343                 if (ngx_buf_in_memory(in->buf)) {
    344                     in->buf->pos = in->buf->last;
    345                 }
    346 
    347                 if (in->buf->in_file) {
    348                     in->buf->file_pos = in->buf->file_last;
    349                 }
    350 
    351                 continue;
    352             }
    353 
    354             if (ngx_buf_in_memory(in->buf)) {
    355                 in->buf->pos += (size_t) sent;
    356             }
    357 
    358             if (in->buf->in_file) {
    359                 in->buf->file_pos += sent;
    360             }
    361 
    362             break;
    363         }
     328        in = ngx_handle_sent_chain(in, sent);
    364329
    365330        if (eintr) {
  • src/os/unix/ngx_solaris_sendfilev_chain.c

    r5320 r5850  
    208208        c->sent += sent;
    209209
    210         for ( /* void */ ; in; in = in->next) {
    211 
    212             if (ngx_buf_special(in->buf)) {
    213                 continue;
    214             }
    215 
    216             if (sent == 0) {
    217                 break;
    218             }
    219 
    220             size = ngx_buf_size(in->buf);
    221 
    222             if ((off_t) sent >= size) {
    223                 sent = (size_t) ((off_t) sent - size);
    224 
    225                 if (ngx_buf_in_memory(in->buf)) {
    226                     in->buf->pos = in->buf->last;
    227                 }
    228 
    229                 if (in->buf->in_file) {
    230                     in->buf->file_pos = in->buf->file_last;
    231                 }
    232 
    233                 continue;
    234             }
    235 
    236             if (ngx_buf_in_memory(in->buf)) {
    237                 in->buf->pos += sent;
    238             }
    239 
    240             if (in->buf->in_file) {
    241                 in->buf->file_pos += sent;
    242             }
    243 
    244             break;
    245         }
     210        in = ngx_handle_sent_chain(in, sent);
    246211
    247212        if (eintr) {
  • src/os/unix/ngx_writev_chain.c

    r4596 r5850  
    144144        c->sent += sent;
    145145
    146         for (cl = in; cl; cl = cl->next) {
    147 
    148             if (ngx_buf_special(cl->buf)) {
    149                 continue;
    150             }
    151 
    152             if (sent == 0) {
    153                 break;
    154             }
    155 
    156             size = cl->buf->last - cl->buf->pos;
    157 
    158             if (sent >= size) {
    159                 sent -= size;
    160                 cl->buf->pos = cl->buf->last;
    161 
    162                 continue;
    163             }
    164 
    165             cl->buf->pos += sent;
    166 
    167             break;
    168         }
     146        cl = ngx_handle_sent_chain(in, sent);
    169147
    170148        if (eintr) {
  • src/os/win32/ngx_wsasend_chain.c

    r4412 r5850  
    120120        c->sent += sent;
    121121
    122         for (cl = in; cl; cl = cl->next) {
    123 
    124             if (ngx_buf_special(cl->buf)) {
    125                 continue;
    126             }
    127 
    128             if (sent == 0) {
    129                 break;
    130             }
    131 
    132             size = cl->buf->last - cl->buf->pos;
    133 
    134             if (sent >= size) {
    135                 sent -= size;
    136                 cl->buf->pos = cl->buf->last;
    137 
    138                 continue;
    139             }
    140 
    141             cl->buf->pos += sent;
    142 
    143             break;
    144         }
     122        cl = ngx_handle_sent_chain(in, sent);
    145123
    146124        if (!complete) {
     
    309287    c->sent += sent;
    310288
    311     for (cl = in; cl && sent > 0; cl = cl->next) {
    312         if (ngx_buf_special(cl->buf)) {
    313             continue;
    314         }
    315 
    316         if (sent == 0) {
    317             break;
    318         }
    319 
    320         size = cl->buf->last - cl->buf->pos;
    321 
    322         if (sent >= size) {
    323             sent -= size;
    324             cl->buf->pos = cl->buf->last;
    325 
    326             continue;
    327         }
    328 
    329         cl->buf->pos += sent;
    330 
    331         break;
    332     }
     289    cl = ngx_handle_sent_chain(in, sent);
    333290
    334291    if (cl) {
Note: See TracChangeset for help on using the changeset viewer.