Mercurial > hg > nginx
comparison src/http/ngx_http_spdy_filter_module.c @ 5528:d5de6c25b759
SPDY: use frame->next pointer to chain free frames.
There is no need in separate "free" pointer and like it is for ngx_chain_t
the "next" pointer can be used. But after this change successfully handled
frame should not be accessed, so the frame handling cycle was improved to
store pointer to the next frame before processing.
Also worth noting that initializing "free" pointer to NULL in the original
code was surplus.
author | Valentin Bartenev <vbart@nginx.com> |
---|---|
date | Wed, 22 Jan 2014 04:58:19 +0400 |
parents | 9d1479234f3c |
children | e4adaa47af65 |
comparison
equal
deleted
inserted
replaced
5527:f3f7b72ca6e9 | 5528:d5de6c25b759 |
---|---|
585 } | 585 } |
586 | 586 |
587 frame->first = cl; | 587 frame->first = cl; |
588 frame->last = cl; | 588 frame->last = cl; |
589 frame->handler = ngx_http_spdy_syn_frame_handler; | 589 frame->handler = ngx_http_spdy_syn_frame_handler; |
590 frame->free = NULL; | |
591 frame->stream = stream; | 590 frame->stream = stream; |
592 frame->size = len; | 591 frame->size = len; |
593 frame->priority = stream->priority; | 592 frame->priority = stream->priority; |
594 frame->blocked = 1; | 593 frame->blocked = 1; |
595 frame->fin = r->header_only; | 594 frame->fin = r->header_only; |
819 | 818 |
820 | 819 |
821 frame = stream->free_frames; | 820 frame = stream->free_frames; |
822 | 821 |
823 if (frame) { | 822 if (frame) { |
824 stream->free_frames = frame->free; | 823 stream->free_frames = frame->next; |
825 | 824 |
826 } else { | 825 } else { |
827 frame = ngx_palloc(stream->request->pool, | 826 frame = ngx_palloc(stream->request->pool, |
828 sizeof(ngx_http_spdy_out_frame_t)); | 827 sizeof(ngx_http_spdy_out_frame_t)); |
829 if (frame == NULL) { | 828 if (frame == NULL) { |
879 } | 878 } |
880 | 879 |
881 frame->first = first; | 880 frame->first = first; |
882 frame->last = last; | 881 frame->last = last; |
883 frame->handler = ngx_http_spdy_data_frame_handler; | 882 frame->handler = ngx_http_spdy_data_frame_handler; |
884 frame->free = NULL; | |
885 frame->stream = stream; | 883 frame->stream = stream; |
886 frame->size = NGX_SPDY_FRAME_HEADER_SIZE + len; | 884 frame->size = NGX_SPDY_FRAME_HEADER_SIZE + len; |
887 frame->priority = stream->priority; | 885 frame->priority = stream->priority; |
888 frame->blocked = 0; | 886 frame->blocked = 0; |
889 frame->fin = last->buf->last_buf; | 887 frame->fin = last->buf->last_buf; |
1049 | 1047 |
1050 if (frame->fin) { | 1048 if (frame->fin) { |
1051 stream->out_closed = 1; | 1049 stream->out_closed = 1; |
1052 } | 1050 } |
1053 | 1051 |
1054 frame->free = stream->free_frames; | 1052 frame->next = stream->free_frames; |
1055 stream->free_frames = frame; | 1053 stream->free_frames = frame; |
1056 | 1054 |
1057 stream->queued--; | 1055 stream->queued--; |
1058 } | 1056 } |
1059 | 1057 |