mirror of
https://github.com/nginx/nginx.git
synced 2025-06-12 05:11:37 +08:00
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.
This commit is contained in:
parent
650984cd20
commit
e62156d829
@ -527,7 +527,9 @@ ngx_http_spdy_send_output_queue(ngx_http_spdy_connection_t *sc)
|
||||
}
|
||||
}
|
||||
|
||||
for ( /* void */ ; out; out = out->next) {
|
||||
for ( /* void */ ; out; out = fn) {
|
||||
fn = out->next;
|
||||
|
||||
if (out->handler(sc, out) != NGX_OK) {
|
||||
out->blocked = 1;
|
||||
out->priority = NGX_SPDY_HIGHEST_PRIORITY;
|
||||
@ -1644,7 +1646,7 @@ ngx_http_spdy_get_ctl_frame(ngx_http_spdy_connection_t *sc, size_t size,
|
||||
frame = sc->free_ctl_frames;
|
||||
|
||||
if (frame) {
|
||||
sc->free_ctl_frames = frame->free;
|
||||
sc->free_ctl_frames = frame->next;
|
||||
|
||||
cl = frame->first;
|
||||
cl->buf->pos = cl->buf->start;
|
||||
@ -1674,8 +1676,6 @@ ngx_http_spdy_get_ctl_frame(ngx_http_spdy_connection_t *sc, size_t size,
|
||||
frame->stream = NULL;
|
||||
}
|
||||
|
||||
frame->free = NULL;
|
||||
|
||||
#if (NGX_DEBUG)
|
||||
if (size > NGX_SPDY_CTL_FRAME_BUFFER_SIZE - NGX_SPDY_FRAME_HEADER_SIZE) {
|
||||
ngx_log_error(NGX_LOG_ALERT, sc->pool->log, 0,
|
||||
@ -1705,7 +1705,7 @@ ngx_http_spdy_ctl_frame_handler(ngx_http_spdy_connection_t *sc,
|
||||
return NGX_AGAIN;
|
||||
}
|
||||
|
||||
frame->free = sc->free_ctl_frames;
|
||||
frame->next = sc->free_ctl_frames;
|
||||
sc->free_ctl_frames = frame;
|
||||
|
||||
return NGX_OK;
|
||||
|
@ -141,8 +141,6 @@ struct ngx_http_spdy_out_frame_s {
|
||||
ngx_int_t (*handler)(ngx_http_spdy_connection_t *sc,
|
||||
ngx_http_spdy_out_frame_t *frame);
|
||||
|
||||
ngx_http_spdy_out_frame_t *free;
|
||||
|
||||
ngx_http_spdy_stream_t *stream;
|
||||
size_t size;
|
||||
|
||||
|
@ -587,7 +587,6 @@ ngx_http_spdy_header_filter(ngx_http_request_t *r)
|
||||
frame->first = cl;
|
||||
frame->last = cl;
|
||||
frame->handler = ngx_http_spdy_syn_frame_handler;
|
||||
frame->free = NULL;
|
||||
frame->stream = stream;
|
||||
frame->size = len;
|
||||
frame->priority = stream->priority;
|
||||
@ -821,7 +820,7 @@ ngx_http_spdy_filter_get_data_frame(ngx_http_spdy_stream_t *stream,
|
||||
frame = stream->free_frames;
|
||||
|
||||
if (frame) {
|
||||
stream->free_frames = frame->free;
|
||||
stream->free_frames = frame->next;
|
||||
|
||||
} else {
|
||||
frame = ngx_palloc(stream->request->pool,
|
||||
@ -881,7 +880,6 @@ ngx_http_spdy_filter_get_data_frame(ngx_http_spdy_stream_t *stream,
|
||||
frame->first = first;
|
||||
frame->last = last;
|
||||
frame->handler = ngx_http_spdy_data_frame_handler;
|
||||
frame->free = NULL;
|
||||
frame->stream = stream;
|
||||
frame->size = NGX_SPDY_FRAME_HEADER_SIZE + len;
|
||||
frame->priority = stream->priority;
|
||||
@ -1051,7 +1049,7 @@ ngx_http_spdy_handle_frame(ngx_http_spdy_stream_t *stream,
|
||||
stream->out_closed = 1;
|
||||
}
|
||||
|
||||
frame->free = stream->free_frames;
|
||||
frame->next = stream->free_frames;
|
||||
stream->free_frames = frame;
|
||||
|
||||
stream->queued--;
|
||||
|
Loading…
Reference in New Issue
Block a user