<feed xmlns='http://www.w3.org/2005/Atom'>
<title>unit.git/src, branch 1.17.0-1</title>
<subtitle>Universal Web Application Server</subtitle>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/'/>
<entry>
<title>Using malloc/free for the http fields hash.</title>
<updated>2020-04-16T14:09:23+00:00</updated>
<author>
<name>Max Romanov</name>
<email>max.romanov@nginx.com</email>
</author>
<published>2020-04-16T14:09:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=6bda9b5eeb2b6c99c54f5b314b8eb96d72af3542'/>
<id>6bda9b5eeb2b6c99c54f5b314b8eb96d72af3542</id>
<content type='text'>
This is required due to lack of a graceful shutdown: there is a small gap
between the runtime's memory pool release and router process's exit. Thus, a
worker thread may start processing a request between these two operations,
which may result in an http fields hash access and subsequent crash.

To simplify issue reproduction, it makes sense to add a 2 sec sleep before
exit() in nxt_runtime_exit().
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This is required due to lack of a graceful shutdown: there is a small gap
between the runtime's memory pool release and router process's exit. Thus, a
worker thread may start processing a request between these two operations,
which may result in an http fields hash access and subsequent crash.

To simplify issue reproduction, it makes sense to add a 2 sec sleep before
exit() in nxt_runtime_exit().
</pre>
</div>
</content>
</entry>
<entry>
<title>Fixed memory leak occurring upon failure to accept a connection.</title>
<updated>2020-04-15T12:10:14+00:00</updated>
<author>
<name>Igor Sysoev</name>
<email>igor@sysoev.ru</email>
</author>
<published>2020-04-15T12:10:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=ee62736a11acc4b699102a1260c6a8c5f57c1fef'/>
<id>ee62736a11acc4b699102a1260c6a8c5f57c1fef</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Fixed crash that occurs when idle connections are closed forcibly.</title>
<updated>2020-04-15T11:54:09+00:00</updated>
<author>
<name>Igor Sysoev</name>
<email>igor@sysoev.ru</email>
</author>
<published>2020-04-15T11:54:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=04143c8c7ee59d24aa1d6df0377e7900e96e3f72'/>
<id>04143c8c7ee59d24aa1d6df0377e7900e96e3f72</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Disabled epoll error processing when socket events are inactive.</title>
<updated>2020-04-15T11:54:09+00:00</updated>
<author>
<name>Igor Sysoev</name>
<email>igor@sysoev.ru</email>
</author>
<published>2020-04-15T11:54:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=e616d0915c513323affd938f7eb89d23d4e70df5'/>
<id>e616d0915c513323affd938f7eb89d23d4e70df5</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Completing chained shared memory buffers.</title>
<updated>2020-04-14T13:11:13+00:00</updated>
<author>
<name>Max Romanov</name>
<email>max.romanov@nginx.com</email>
</author>
<published>2020-04-14T13:11:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=9a422b8984a3ed462a2c35ba97fa8234f3a45591'/>
<id>9a422b8984a3ed462a2c35ba97fa8234f3a45591</id>
<content type='text'>
After 41331471eee7 completion handlers should complete next buffer in chain.
Otherwise buffer memory may leak.

Thanks to Peter Tkatchenko for reporing the issue and testing fixes.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
After 41331471eee7 completion handlers should complete next buffer in chain.
Otherwise buffer memory may leak.

Thanks to Peter Tkatchenko for reporing the issue and testing fixes.
</pre>
</div>
</content>
</entry>
<entry>
<title>Resolving a racing condition while adding ports on the app's side.</title>
<updated>2020-04-10T13:21:58+00:00</updated>
<author>
<name>Max Romanov</name>
<email>max.romanov@nginx.com</email>
</author>
<published>2020-04-10T13:21:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=58cc13ab291cac5b13462006e3feb780178ef5f3'/>
<id>58cc13ab291cac5b13462006e3feb780178ef5f3</id>
<content type='text'>
An earlier attempt (ad6265786871) to resolve this condition on the
router's side added a new issue: the app could get a request before
acquiring a port.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
An earlier attempt (ad6265786871) to resolve this condition on the
router's side added a new issue: the app could get a request before
acquiring a port.
</pre>
</div>
</content>
</entry>
<entry>
<title>Controller: improved handling of unix domain control socket.</title>
<updated>2020-04-08T12:15:24+00:00</updated>
<author>
<name>Valentin Bartenev</name>
<email>vbart@nginx.com</email>
</author>
<published>2020-04-08T12:15:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=c7f5c1c6641838006088524c2122eae8f9c30431'/>
<id>c7f5c1c6641838006088524c2122eae8f9c30431</id>
<content type='text'>
One of the ways to detect Unit's startup and subsequent readiness to accept
commands relies on waiting for the control socket file to be created.
Earlier, it was unreliable due to a race condition between the client's
connect() and the daemon's listen() calls after the socket's bind() call.

Now, unix domain listening sockets are created with a nxt_listen_socket_create()
call as follows:

   s = socket();
   unlink("path/to/socket.tmp")
   bind(s, "path/to/socket.tmp");
   listen(s);
   rename("path/to/socket.tmp", "path/to/socket");

This eliminates a time-lapse when the socket file is already created but nobody
is listening on it yet, which therefore prevents the condition described above.

Also, it allows reliably detecting whether the socket is being used or simply
wasn't cleaned after the daemon stopped abruptly.  A successful connection to
the socket file means the daemon has been started; otherwise, the file can be
overwritten.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
One of the ways to detect Unit's startup and subsequent readiness to accept
commands relies on waiting for the control socket file to be created.
Earlier, it was unreliable due to a race condition between the client's
connect() and the daemon's listen() calls after the socket's bind() call.

Now, unix domain listening sockets are created with a nxt_listen_socket_create()
call as follows:

   s = socket();
   unlink("path/to/socket.tmp")
   bind(s, "path/to/socket.tmp");
   listen(s);
   rename("path/to/socket.tmp", "path/to/socket");

This eliminates a time-lapse when the socket file is already created but nobody
is listening on it yet, which therefore prevents the condition described above.

Also, it allows reliably detecting whether the socket is being used or simply
wasn't cleaned after the daemon stopped abruptly.  A successful connection to
the socket file means the daemon has been started; otherwise, the file can be
overwritten.
</pre>
</div>
</content>
</entry>
<entry>
<title>Controller: fixed cleaning up of control socket file in some cases.</title>
<updated>2020-04-08T12:15:24+00:00</updated>
<author>
<name>Valentin Bartenev</name>
<email>vbart@nginx.com</email>
</author>
<published>2020-04-08T12:15:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=a6d9efcee1546f67a1a2b926744f7052f3536b03'/>
<id>a6d9efcee1546f67a1a2b926744f7052f3536b03</id>
<content type='text'>
Previously, the unix domain control socket file might have been left
in the file system after a failed nxt_listen_socket_create() call.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Previously, the unix domain control socket file might have been left
in the file system after a failed nxt_listen_socket_create() call.
</pre>
</div>
</content>
</entry>
<entry>
<title>Removed unused code related to testing of address binding.</title>
<updated>2020-04-08T12:15:24+00:00</updated>
<author>
<name>Valentin Bartenev</name>
<email>vbart@nginx.com</email>
</author>
<published>2020-04-08T12:15:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=555d595f38801685f95f140f85b20f5dcfaa49cd'/>
<id>555d595f38801685f95f140f85b20f5dcfaa49cd</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Controller: eliminated extra control socket's sockaddr copying.</title>
<updated>2020-04-08T12:15:24+00:00</updated>
<author>
<name>Valentin Bartenev</name>
<email>vbart@nginx.com</email>
</author>
<published>2020-04-08T12:15:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=27c1e268563da002e57f34032499efd7543b8b9d'/>
<id>27c1e268563da002e57f34032499efd7543b8b9d</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
