<feed xmlns='http://www.w3.org/2005/Atom'>
<title>nginx.git, branch release-1.25.2</title>
<subtitle>nginx</subtitle>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/'/>
<entry>
<title>nginx-1.25.2-RELEASE</title>
<updated>2023-08-15T17:03:04+00:00</updated>
<author>
<name>Maxim Dounin</name>
<email>mdounin@mdounin.ru</email>
</author>
<published>2023-08-15T17:03:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=349c63ec6118027f1bff2424b1195c7f9a357c73'/>
<id>349c63ec6118027f1bff2424b1195c7f9a357c73</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>2023-08-15T15:10:50+00:00</updated>
<author>
<name>Maxim Dounin</name>
<email>mdounin@mdounin.ru</email>
</author>
<published>2023-08-15T15:10:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=e58d3cdd4ebbb81570548d2c19858a7f5d9f8859'/>
<id>e58d3cdd4ebbb81570548d2c19858a7f5d9f8859</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>QUIC: path MTU discovery.</title>
<updated>2023-08-14T05:21:27+00:00</updated>
<author>
<name>Roman Arutyunyan</name>
<email>arut@nginx.com</email>
</author>
<published>2023-08-14T05:21:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=eeb8a9f56f727d2543c8ae7feae0de784e329b27'/>
<id>eeb8a9f56f727d2543c8ae7feae0de784e329b27</id>
<content type='text'>
MTU selection starts by doubling the initial MTU until the first failure.
Then binary search is used to find the path MTU.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
MTU selection starts by doubling the initial MTU until the first failure.
Then binary search is used to find the path MTU.
</pre>
</div>
</content>
</entry>
<entry>
<title>QUIC: allowed ngx_quic_frame_sendto() to return NGX_AGAIN.</title>
<updated>2023-08-08T06:43:17+00:00</updated>
<author>
<name>Roman Arutyunyan</name>
<email>arut@nginx.com</email>
</author>
<published>2023-08-08T06:43:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=58fc5e2830a0fa70810005ca03fdb9a531719696'/>
<id>58fc5e2830a0fa70810005ca03fdb9a531719696</id>
<content type='text'>
Previously, NGX_AGAIN returned by ngx_quic_send() was treated by
ngx_quic_frame_sendto() as error, which triggered errors in its callers.
However, a blocked socket is not an error.  Now NGX_AGAIN is passed as is to
the ngx_quic_frame_sendto() callers, which can safely ignore it.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Previously, NGX_AGAIN returned by ngx_quic_send() was treated by
ngx_quic_frame_sendto() as error, which triggered errors in its callers.
However, a blocked socket is not an error.  Now NGX_AGAIN is passed as is to
the ngx_quic_frame_sendto() callers, which can safely ignore it.
</pre>
</div>
</content>
</entry>
<entry>
<title>QUIC: removed explicit packet padding for certain frames.</title>
<updated>2023-07-06T07:30:47+00:00</updated>
<author>
<name>Roman Arutyunyan</name>
<email>arut@nginx.com</email>
</author>
<published>2023-07-06T07:30:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=8ab38890736128ec0e167ae28d23d3bbfe2a2223'/>
<id>8ab38890736128ec0e167ae28d23d3bbfe2a2223</id>
<content type='text'>
The frames for which the padding is removed are PATH_CHALLENGE and
PATH_RESPONSE, which are sent separately by ngx_quic_frame_sendto().
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The frames for which the padding is removed are PATH_CHALLENGE and
PATH_RESPONSE, which are sent separately by ngx_quic_frame_sendto().
</pre>
</div>
</content>
</entry>
<entry>
<title>QUIC: removed path-&gt;limited flag.</title>
<updated>2023-07-06T13:49:01+00:00</updated>
<author>
<name>Roman Arutyunyan</name>
<email>arut@nginx.com</email>
</author>
<published>2023-07-06T13:49:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=3990aaaa5557d334f731dcc8f04273a0c45feee3'/>
<id>3990aaaa5557d334f731dcc8f04273a0c45feee3</id>
<content type='text'>
Its value is the opposite of path-&gt;validated.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Its value is the opposite of path-&gt;validated.
</pre>
</div>
</content>
</entry>
<entry>
<title>QUIC: fixed probe-congestion deadlock.</title>
<updated>2023-08-14T04:28:30+00:00</updated>
<author>
<name>Roman Arutyunyan</name>
<email>arut@nginx.com</email>
</author>
<published>2023-08-14T04:28:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=4f3707c5c775ac83a0cf005617e1fdffd027b8a4'/>
<id>4f3707c5c775ac83a0cf005617e1fdffd027b8a4</id>
<content type='text'>
When probe timeout expired while congestion window was exhausted, probe PINGs
could not be sent.  As a result, lost packets could not be declared lost and
congestion window could not be freed for new packets.  This deadlock
continued until connection idle timeout expiration.

Now PINGs are sent separately from the frame queue without congestion control,
as specified by RFC 9002, Section 7:

  An endpoint MUST NOT send a packet if it would cause bytes_in_flight
  (see Appendix B.2) to be larger than the congestion window, unless the
  packet is sent on a PTO timer expiration (see Section 6.2) or when entering
  recovery (see Section 7.3.2).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When probe timeout expired while congestion window was exhausted, probe PINGs
could not be sent.  As a result, lost packets could not be declared lost and
congestion window could not be freed for new packets.  This deadlock
continued until connection idle timeout expiration.

Now PINGs are sent separately from the frame queue without congestion control,
as specified by RFC 9002, Section 7:

  An endpoint MUST NOT send a packet if it would cause bytes_in_flight
  (see Appendix B.2) to be larger than the congestion window, unless the
  packet is sent on a PTO timer expiration (see Section 6.2) or when entering
  recovery (see Section 7.3.2).
</pre>
</div>
</content>
</entry>
<entry>
<title>QUIC: fixed PTO expiration condition.</title>
<updated>2023-08-01T07:21:59+00:00</updated>
<author>
<name>Roman Arutyunyan</name>
<email>arut@nginx.com</email>
</author>
<published>2023-08-01T07:21:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=842a930b88c6103a793d210826813f09d7fa84a7'/>
<id>842a930b88c6103a793d210826813f09d7fa84a7</id>
<content type='text'>
Previously, PTO handler analyzed the first packet in the sent queue for the
timeout expiration.  However, the last sent packet should be analyzed instead.
An example is timeout calculation in ngx_quic_set_lost_timer().
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Previously, PTO handler analyzed the first packet in the sent queue for the
timeout expiration.  However, the last sent packet should be analyzed instead.
An example is timeout calculation in ngx_quic_set_lost_timer().
</pre>
</div>
</content>
</entry>
<entry>
<title>QUIC: avoid accessing freed frame.</title>
<updated>2023-08-01T07:20:04+00:00</updated>
<author>
<name>Roman Arutyunyan</name>
<email>arut@nginx.com</email>
</author>
<published>2023-08-01T07:20:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=57f87d61639d7fc0f5df187056ef03fcec3236a8'/>
<id>57f87d61639d7fc0f5df187056ef03fcec3236a8</id>
<content type='text'>
Previously the field pnum of a potentially freed frame was accessed.  Now the
value is copied to a local variable.  The old behavior did not cause any
problems since the frame memory is not freed, but is moved to a free queue
instead.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Previously the field pnum of a potentially freed frame was accessed.  Now the
value is copied to a local variable.  The old behavior did not cause any
problems since the frame memory is not freed, but is moved to a free queue
instead.
</pre>
</div>
</content>
</entry>
<entry>
<title>QUIC: fixed congesion control in GSO mode.</title>
<updated>2023-07-27T09:35:42+00:00</updated>
<author>
<name>Roman Arutyunyan</name>
<email>arut@nginx.com</email>
</author>
<published>2023-07-27T09:35:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=968293d5e721b9c7ff4098ee76a3313b0b7fd2ac'/>
<id>968293d5e721b9c7ff4098ee76a3313b0b7fd2ac</id>
<content type='text'>
In non-GSO mode, a datagram is sent if congestion window is not exceeded by the
time of send.  The window could be exceeded by a small amount after the send.
In GSO mode, congestion window was checked in a similar way, but for all
concatenated datagrams as a whole.  This could result in exceeding congestion
window by a lot.  Now congestion window is checked for every datagram in GSO
mode as well.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
In non-GSO mode, a datagram is sent if congestion window is not exceeded by the
time of send.  The window could be exceeded by a small amount after the send.
In GSO mode, congestion window was checked in a similar way, but for all
concatenated datagrams as a whole.  This could result in exceeding congestion
window by a lot.  Now congestion window is checked for every datagram in GSO
mode as well.
</pre>
</div>
</content>
</entry>
</feed>
