<feed xmlns='http://www.w3.org/2005/Atom'>
<title>unit.git/src, branch 1.5-1</title>
<subtitle>Universal Web Application Server</subtitle>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/'/>
<entry>
<title>Node.js: additional type check for response.setHeader value.</title>
<updated>2018-10-24T13:21:53+00:00</updated>
<author>
<name>Alexander Borisov</name>
<email>alexander.borisov@nginx.com</email>
</author>
<published>2018-10-24T13:21:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=5b3d3e0a885614cbc7966bc1d4b73ba630caf1ed'/>
<id>5b3d3e0a885614cbc7966bc1d4b73ba630caf1ed</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Removed unused "--upstream" command line option.</title>
<updated>2018-10-23T15:55:16+00:00</updated>
<author>
<name>Valentin Bartenev</name>
<email>vbart@nginx.com</email>
</author>
<published>2018-10-23T15:55:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=6cc4080af23d0d8c39ba43f6c90de4f76d64e0f1'/>
<id>6cc4080af23d0d8c39ba43f6c90de4f76d64e0f1</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Backout of ba94959b1dec and improving epoll error handling.</title>
<updated>2018-10-23T13:31:42+00:00</updated>
<author>
<name>Igor Sysoev</name>
<email>igor@sysoev.ru</email>
</author>
<published>2018-10-23T13:31:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=d4a99aad84e1ab432733650e9753814311e04a01'/>
<id>d4a99aad84e1ab432733650e9753814311e04a01</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Added ability to publish Node.js module.</title>
<updated>2018-10-23T10:06:44+00:00</updated>
<author>
<name>Alexander Borisov</name>
<email>alexander.borisov@nginx.com</email>
</author>
<published>2018-10-23T10:06:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=780181412623c0dc9232fc7f56055b6e3312a319'/>
<id>780181412623c0dc9232fc7f56055b6e3312a319</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Fixed termination signal handlers in worker processes.</title>
<updated>2018-10-22T14:43:31+00:00</updated>
<author>
<name>Igor Sysoev</name>
<email>igor@sysoev.ru</email>
</author>
<published>2018-10-22T14:43:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=57991dc3f2ee1a028605e5dde01cac367e09142c'/>
<id>57991dc3f2ee1a028605e5dde01cac367e09142c</id>
<content type='text'>
This closes #99 issue on GitHub.
Thanks to Julian Brost.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This closes #99 issue on GitHub.
Thanks to Julian Brost.
</pre>
</div>
</content>
</entry>
<entry>
<title>Improved epoll failures handling.</title>
<updated>2018-10-22T14:43:28+00:00</updated>
<author>
<name>Igor Sysoev</name>
<email>igor@sysoev.ru</email>
</author>
<published>2018-10-22T14:43:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=50dd54877dc88ade87f4259a74918ddfa4498880'/>
<id>50dd54877dc88ade87f4259a74918ddfa4498880</id>
<content type='text'>
epoll changes are committed to the kernel before epoll_wait() or
on changes array overflow.  In the latter case if there are errors
epoll_wait() timeout was not set to zero.

This commit is related to #173 issue on GitHub.
Thanks to 洪志道 (Hong Zhi Dao).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
epoll changes are committed to the kernel before epoll_wait() or
on changes array overflow.  In the latter case if there are errors
epoll_wait() timeout was not set to zero.

This commit is related to #173 issue on GitHub.
Thanks to 洪志道 (Hong Zhi Dao).
</pre>
</div>
</content>
</entry>
<entry>
<title>Removed duplicate code in epoll.</title>
<updated>2018-10-22T13:25:58+00:00</updated>
<author>
<name>Igor Sysoev</name>
<email>igor@sysoev.ru</email>
</author>
<published>2018-10-22T13:25:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=deeb276d2386b90e695fc0650bfb7e08806264ee'/>
<id>deeb276d2386b90e695fc0650bfb7e08806264ee</id>
<content type='text'>
This commit is related to #173 issue on GitHub.
Thanks to 洪志道 (Hong Zhi Dao).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This commit is related to #173 issue on GitHub.
Thanks to 洪志道 (Hong Zhi Dao).
</pre>
</div>
</content>
</entry>
<entry>
<title>Handling of timers with bias.</title>
<updated>2018-10-22T13:04:16+00:00</updated>
<author>
<name>Valentin Bartenev</name>
<email>vbart@nginx.com</email>
</author>
<published>2018-10-22T13:04:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=da0ef366dc1affa740618eb4f4baa8bbb62f8d70'/>
<id>da0ef366dc1affa740618eb4f4baa8bbb62f8d70</id>
<content type='text'>
Timers that don't require maximum precision (most of them, actually) can be
triggered earlier or later within the bias interval.

To reduce wakeups by timers, the expire function now triggers not only all
timers that fall within the elapsed time, but also those whose bias falls
within this interval.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Timers that don't require maximum precision (most of them, actually) can be
triggered earlier or later within the bias interval.

To reduce wakeups by timers, the expire function now triggers not only all
timers that fall within the elapsed time, but also those whose bias falls
within this interval.
</pre>
</div>
</content>
</entry>
<entry>
<title>Timers: separation of delete and insert operations on rbtree.</title>
<updated>2018-10-22T13:02:14+00:00</updated>
<author>
<name>Valentin Bartenev</name>
<email>vbart@nginx.com</email>
</author>
<published>2018-10-22T13:02:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=b20e995e80d236945ec8388dfee37257ce9e5445'/>
<id>b20e995e80d236945ec8388dfee37257ce9e5445</id>
<content type='text'>
Delete/insert operation complexity for a red-black tree is O(log n),
where n is the total number of tree elements.

If all delete operations are performed before all insert operations,
the average number of tree elements during an operation will be
lower than in the mixed-operations case.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Delete/insert operation complexity for a red-black tree is O(log n),
where n is the total number of tree elements.

If all delete operations are performed before all insert operations,
the average number of tree elements during an operation will be
lower than in the mixed-operations case.
</pre>
</div>
</content>
</entry>
<entry>
<title>Re-engineered timers.</title>
<updated>2018-10-22T13:01:10+00:00</updated>
<author>
<name>Valentin Bartenev</name>
<email>vbart@nginx.com</email>
</author>
<published>2018-10-22T13:01:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=a4aaf906794d9f82710614ba368a36500e8a8254'/>
<id>a4aaf906794d9f82710614ba368a36500e8a8254</id>
<content type='text'>
To optimize rbtree operations, all changes are stored in array and later
processed in batches.

The previous implementation of this mechanics had a number of design flaws.
Each change was saved in a new array entry; until the changes were applied,
the timer remained in an intermediate state (NXT_TIMER_CHANGING).
This intermediate state didn't allow to identify if time was going to be
disabled or enabled.  However, the nxt_conn_io_read() function relied on
this information; as a result, in some cases the read timeout wasn't set.

Also, the nxt_timer_delete() function did not reliably track whether a timer
was added to the work queue.  It checked the NXT_TIMER_ENQUEUED state of
a timer, but this state could be reset to NXT_TIMER_DISABLED by a
nxt_timer_disable() call or another nxt_timer_delete() call.

Now, instead of keeping the whole history of the timer's changes, the new
implementation updates the timer state immediately, and only one operation
is added to the array to add or delete timer in the rbtree according
to its final state.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
To optimize rbtree operations, all changes are stored in array and later
processed in batches.

The previous implementation of this mechanics had a number of design flaws.
Each change was saved in a new array entry; until the changes were applied,
the timer remained in an intermediate state (NXT_TIMER_CHANGING).
This intermediate state didn't allow to identify if time was going to be
disabled or enabled.  However, the nxt_conn_io_read() function relied on
this information; as a result, in some cases the read timeout wasn't set.

Also, the nxt_timer_delete() function did not reliably track whether a timer
was added to the work queue.  It checked the NXT_TIMER_ENQUEUED state of
a timer, but this state could be reset to NXT_TIMER_DISABLED by a
nxt_timer_disable() call or another nxt_timer_delete() call.

Now, instead of keeping the whole history of the timer's changes, the new
implementation updates the timer state immediately, and only one operation
is added to the array to add or delete timer in the rbtree according
to its final state.
</pre>
</div>
</content>
</entry>
</feed>
