<feed xmlns='http://www.w3.org/2005/Atom'>
<title>nginx.git, branch release-1.21.3</title>
<subtitle>nginx</subtitle>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/'/>
<entry>
<title>nginx-1.21.3-RELEASE</title>
<updated>2021-09-07T15:21:02+00:00</updated>
<author>
<name>Maxim Dounin</name>
<email>mdounin@mdounin.ru</email>
</author>
<published>2021-09-07T15:21:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=0b65f34ef072c18ed688babe3c36781dda4c717d'/>
<id>0b65f34ef072c18ed688babe3c36781dda4c717d</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>HTTP/2: optimized processing of small DATA frames.</title>
<updated>2021-09-06T11:54:50+00:00</updated>
<author>
<name>Maxim Dounin</name>
<email>mdounin@mdounin.ru</email>
</author>
<published>2021-09-06T11:54:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=243469df65fca2a853c6fe32754d1bfe19567cd2'/>
<id>243469df65fca2a853c6fe32754d1bfe19567cd2</id>
<content type='text'>
The request body filter chain is no longer called after processing
a DATA frame.  Instead, we now post a read event to do this.  This
ensures that multiple small DATA frames read during the same event loop
iteration are coalesced together, resulting in much faster processing.

Since rb-&gt;buf can now contain unprocessed data, window update is no
longer sent in ngx_http_v2_state_read_data() in case of flow control
being used due to filter buffering.  Instead, window will be updated
by ngx_http_v2_read_client_request_body_handler() in the posted read
event.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The request body filter chain is no longer called after processing
a DATA frame.  Instead, we now post a read event to do this.  This
ensures that multiple small DATA frames read during the same event loop
iteration are coalesced together, resulting in much faster processing.

Since rb-&gt;buf can now contain unprocessed data, window update is no
longer sent in ngx_http_v2_state_read_data() in case of flow control
being used due to filter buffering.  Instead, window will be updated
by ngx_http_v2_read_client_request_body_handler() in the posted read
event.
</pre>
</div>
</content>
</entry>
<entry>
<title>HTTP/2: fixed timers left after request body reading.</title>
<updated>2021-09-06T11:54:48+00:00</updated>
<author>
<name>Maxim Dounin</name>
<email>mdounin@mdounin.ru</email>
</author>
<published>2021-09-06T11:54:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=584a30b4d51302755c5600892fc293b1586985f7'/>
<id>584a30b4d51302755c5600892fc293b1586985f7</id>
<content type='text'>
Following rb-&gt;filter_need_buffering changes, request body reading is
only finished after the filter chain is called and rb-&gt;last_saved is set.
As such, with r-&gt;request_body_no_buffering, timer on fc-&gt;read is no
longer removed when the last part of the body is received, potentially
resulting in incorrect behaviour.

The fix is to call ngx_http_v2_process_request_body() from the
ngx_http_v2_read_unbuffered_request_body() function instead of
directly calling ngx_http_v2_filter_request_body(), so the timer
is properly removed.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Following rb-&gt;filter_need_buffering changes, request body reading is
only finished after the filter chain is called and rb-&gt;last_saved is set.
As such, with r-&gt;request_body_no_buffering, timer on fc-&gt;read is no
longer removed when the last part of the body is received, potentially
resulting in incorrect behaviour.

The fix is to call ngx_http_v2_process_request_body() from the
ngx_http_v2_read_unbuffered_request_body() function instead of
directly calling ngx_http_v2_filter_request_body(), so the timer
is properly removed.
</pre>
</div>
</content>
</entry>
<entry>
<title>HTTP/2: fixed window updates when buffering in filters.</title>
<updated>2021-09-06T11:54:47+00:00</updated>
<author>
<name>Maxim Dounin</name>
<email>mdounin@mdounin.ru</email>
</author>
<published>2021-09-06T11:54:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=27fb6cdb9f7aa9d6258251d565b199e2a15f5286'/>
<id>27fb6cdb9f7aa9d6258251d565b199e2a15f5286</id>
<content type='text'>
In the body read handler, the window was incorrectly calculated
based on the full buffer size instead of the amount of free space
in the buffer.  If the request body is buffered by a filter, and
the buffer is not empty after the read event is generated by the
filter to resume request body processing, this could result in
"http2 negative window update" alerts.

Further, in the body ready handler and in ngx_http_v2_state_read_data()
the buffer wasn't cleared when the data were already written to disk,
so the client might stuck without window updates.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
In the body read handler, the window was incorrectly calculated
based on the full buffer size instead of the amount of free space
in the buffer.  If the request body is buffered by a filter, and
the buffer is not empty after the read event is generated by the
filter to resume request body processing, this could result in
"http2 negative window update" alerts.

Further, in the body ready handler and in ngx_http_v2_state_read_data()
the buffer wasn't cleared when the data were already written to disk,
so the client might stuck without window updates.
</pre>
</div>
</content>
</entry>
<entry>
<title>Fixed debug logging.</title>
<updated>2021-09-02T09:25:37+00:00</updated>
<author>
<name>Roman Arutyunyan</name>
<email>arut@nginx.com</email>
</author>
<published>2021-09-02T09:25:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=16557ff8b611748e463ff951d6931fb60d9b78f1'/>
<id>16557ff8b611748e463ff951d6931fb60d9b78f1</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Version bump.</title>
<updated>2021-09-03T14:19:33+00:00</updated>
<author>
<name>Roman Arutyunyan</name>
<email>arut@nginx.com</email>
</author>
<published>2021-09-03T14:19:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=3575f44a17cb533e19616a6f730ca077a68e2b0a'/>
<id>3575f44a17cb533e19616a6f730ca077a68e2b0a</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>release-1.21.2 tag</title>
<updated>2021-08-31T15:13:47+00:00</updated>
<author>
<name>Maxim Dounin</name>
<email>mdounin@mdounin.ru</email>
</author>
<published>2021-08-31T15:13:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=a80a0601b95f58146381d8f208d4de293da7a239'/>
<id>a80a0601b95f58146381d8f208d4de293da7a239</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>nginx-1.21.2-RELEASE</title>
<updated>2021-08-31T15:13:46+00:00</updated>
<author>
<name>Maxim Dounin</name>
<email>mdounin@mdounin.ru</email>
</author>
<published>2021-08-31T15:13:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=d16245213a7072ff14f050bff227b75d59c49bec'/>
<id>d16245213a7072ff14f050bff227b75d59c49bec</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Updated OpenSSL used for win32 builds.</title>
<updated>2021-08-31T14:54:54+00:00</updated>
<author>
<name>Maxim Dounin</name>
<email>mdounin@mdounin.ru</email>
</author>
<published>2021-08-31T14:54:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=7e1667ca753a7c73c6f7371eb2c0a9153280953f'/>
<id>7e1667ca753a7c73c6f7371eb2c0a9153280953f</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>HTTP/2: avoid memcpy() with NULL source and zero length.</title>
<updated>2021-08-31T13:44:13+00:00</updated>
<author>
<name>Maxim Dounin</name>
<email>mdounin@mdounin.ru</email>
</author>
<published>2021-08-31T13:44:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=15bf6d8cc950d3aec2d1c3152b39f62be4939025'/>
<id>15bf6d8cc950d3aec2d1c3152b39f62be4939025</id>
<content type='text'>
Prodded by Clang Static Analyzer.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Prodded by Clang Static Analyzer.
</pre>
</div>
</content>
</entry>
</feed>
