Mercurial > hg > nginx-quic
view docs/xsls/changes.xsls @ 5510:3ff29c30effb
SPDY: elimination of r->blocked counter usage for queuing frames.
It was used to prevent destroying of request object when there are unsent
frames in queue for the stream. Since it was incremented for each frame
and is only 8 bits long, so it was not very hard to overflow the counter.
Now the stream->queued counter is checked instead.
author | Valentin Bartenev <vbart@nginx.com> |
---|---|
date | Tue, 14 Jan 2014 16:24:45 +0400 |
parents | 76bc29f06168 |
children | 529f10f7757c |
line wrap: on
line source
X:stylesheet { X:output method="text"; X:param lang="'en'"; X:param configuration="'../xml/change_log_conf.xml'"; X:var conf = "document($configuration)/configuration"; X:var start = "$conf/start"; X:var indent = "$conf/indent"; X:var max = "$conf/length"; X:var br = {<br>} X:template = "/" { !! "change_log"; } X:template = "change_log" { !! "changes"; } X:template = "changes" { X:text { } !{substring(concat($conf/changes[@lang=$lang]/title, //change_log/@title, ' ', @ver, ' '), 1, $conf/changes[@lang=$lang]/length)} X:if "$lang='ru'" { !{@date} } X:if "$lang='en'" { !{substring(@date, 1, 2)} !{$conf/changes[@lang=$lang]/month[number(substring(current()/@date, 4, 2))]} !{substring(@date, 7, 4)} } X:text { } !! "change"; X:text { } } X:template = "change" { X:var prefix = "$conf/changes[@lang=$lang]/*[local-name(.)=current()/@type]" X:var postfix = { X:if "$prefix" { X:text {: } } } !! "para[@lang=$lang]" (prefix = "concat($start, $prefix, $postfix)"); } X:template para(prefix) = "para" { X:var text = { !!; } X:text { } !wrap(text = "normalize-space($text)", prefix = { X:if "position() = 1" { !{$prefix} } else { !{$indent} } }) } X:template wrap(text, prefix) { X:if "$text" { X:var offset = { X:choose { X:when "starts-with($text, concat($br, ' '))" { !{string-length($br) + 2} } X:when "starts-with($text, $br)" { !{string-length($br) + 1} } X:otherwise { 1 } } } X:var length = { !length(text = "substring($text, $offset)", prefix = "string-length($prefix)", length = "$max") } !{$prefix} !{normalize-space(translate(substring($text, $offset, $length), ' ', ' '))} X:text { } !wrap(text = "substring($text, $length + $offset)", prefix = "$indent") } } X:template length(text, prefix, length) { X:var break = "substring-before(substring($text, 1, $length - $prefix + string-length($br)), $br)" X:choose { X:when "$break" { !{string-length($break)} } X:when "$length = 0" { !{$max - $prefix} } X:when "string-length($text) + $prefix <= $length" { !{$length - $prefix} } X:when "substring($text, $length - $prefix + 1, 1) = ' '" { !{$length - $prefix + 1} } X:otherwise { !length(text = "$text", prefix = "$prefix", length = "$length - 1") } } } X:template = "at" {@} X:template = "br" { !{$br} } X:template = "nobr" { !{translate(., ' ', ' ')} } }