<feed xmlns='http://www.w3.org/2005/Atom'>
<title>unit.git, branch 1.13.0-1</title>
<subtitle>Universal Web Application Server</subtitle>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/'/>
<entry>
<title>Merged with the default branch.</title>
<updated>2019-11-14T16:29:00+00:00</updated>
<author>
<name>Andrei Belov</name>
<email>defan@nginx.com</email>
</author>
<published>2019-11-14T16:29:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=7630539c44fcb188bba03a65af34e952a81f2f38'/>
<id>7630539c44fcb188bba03a65af34e952a81f2f38</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Added tag 1.13.0 for changeset 3313bf222e6e</title>
<updated>2019-11-14T16:25:20+00:00</updated>
<author>
<name>Valentin Bartenev</name>
<email>vbart@nginx.com</email>
</author>
<published>2019-11-14T16:25:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=0a27f137de776925a24406cf6961c550824c63a0'/>
<id>0a27f137de776925a24406cf6961c550824c63a0</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Generated Dockerfiles for Unit 1.13.0.</title>
<updated>2019-11-14T16:24:14+00:00</updated>
<author>
<name>Valentin Bartenev</name>
<email>vbart@nginx.com</email>
</author>
<published>2019-11-14T16:24:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=2241847efbc3dfdf59f68d6a03a95aa67aa29fd7'/>
<id>2241847efbc3dfdf59f68d6a03a95aa67aa29fd7</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Added version 1.13.0 CHANGES.</title>
<updated>2019-11-14T16:23:38+00:00</updated>
<author>
<name>Valentin Bartenev</name>
<email>vbart@nginx.com</email>
</author>
<published>2019-11-14T16:23:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=182107c10ed7937e8becf49b870264fc34fb3c17'/>
<id>182107c10ed7937e8becf49b870264fc34fb3c17</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Tests: Python exception tests.</title>
<updated>2019-11-14T15:46:28+00:00</updated>
<author>
<name>Andrei Zeliankou</name>
<email>zelenkov@nginx.com</email>
</author>
<published>2019-11-14T15:46:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=1072c9482998fd698bc400953e0db9fe2c6b75f2'/>
<id>1072c9482998fd698bc400953e0db9fe2c6b75f2</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Python: avoiding buffering of exception backtraces.</title>
<updated>2019-11-14T14:48:48+00:00</updated>
<author>
<name>Valentin Bartenev</name>
<email>vbart@nginx.com</email>
</author>
<published>2019-11-14T14:48:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=c2976fb3378b015b7c70247e0d462c1b52214458'/>
<id>c2976fb3378b015b7c70247e0d462c1b52214458</id>
<content type='text'>
A quote from the Python 3 documentation:

 | When interactive, stdout and stderr streams are line-buffered.
 | Otherwise, they are block-buffered like regular text files.

As a result, if an exception occurred and PyErr_Print() was called, its output
could be buffered but not printed to the log for a while (ultimately, until
the interpreter finalization).  If the application process crashed shortly,
the backtrace was completely lost.

Buffering can be disabled by redefining the sys.stderr stream object.
However, interference with standard environment objects was deemed undesirable.
Instead, sys.stderr.flush() is called every time after printing exceptions.
A potential advantage here is that lines from backtraces won't be mixed
with other lines in the log.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
A quote from the Python 3 documentation:

 | When interactive, stdout and stderr streams are line-buffered.
 | Otherwise, they are block-buffered like regular text files.

As a result, if an exception occurred and PyErr_Print() was called, its output
could be buffered but not printed to the log for a while (ultimately, until
the interpreter finalization).  If the application process crashed shortly,
the backtrace was completely lost.

Buffering can be disabled by redefining the sys.stderr stream object.
However, interference with standard environment objects was deemed undesirable.
Instead, sys.stderr.flush() is called every time after printing exceptions.
A potential advantage here is that lines from backtraces won't be mixed
with other lines in the log.
</pre>
</div>
</content>
</entry>
<entry>
<title>Python: removed wrong PyErr_Print() call.</title>
<updated>2019-11-14T14:48:48+00:00</updated>
<author>
<name>Valentin Bartenev</name>
<email>vbart@nginx.com</email>
</author>
<published>2019-11-14T14:48:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=4e41d900064bcccc02ec7efd0109c190d6637028'/>
<id>4e41d900064bcccc02ec7efd0109c190d6637028</id>
<content type='text'>
PyCallable_Check() doesn't produce errors.

The needless call was introduced in fdd6ed28e3b9.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
PyCallable_Check() doesn't produce errors.

The needless call was introduced in fdd6ed28e3b9.
</pre>
</div>
</content>
</entry>
<entry>
<title>Python: optimized response object close() calling.</title>
<updated>2019-11-14T14:48:48+00:00</updated>
<author>
<name>Valentin Bartenev</name>
<email>vbart@nginx.com</email>
</author>
<published>2019-11-14T14:48:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=b3db7a30c0c248616945926e1692e0601d0bbec6'/>
<id>b3db7a30c0c248616945926e1692e0601d0bbec6</id>
<content type='text'>
PyObject_HasAttrString() is just a wrapper over PyObject_GetAttrString(),
while PyObject_CallMethod() calls it as the first step.  As a result,
PyObject_GetAttrString() was called twice if close() was present.

To get rid of PyObject_HasAttrString() while keeping the same behaviour,
the PyObject_CallMethod() call has been decomposed into separate calls of
PyObject_GetAttrString() and PyObject_CallFunction().
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
PyObject_HasAttrString() is just a wrapper over PyObject_GetAttrString(),
while PyObject_CallMethod() calls it as the first step.  As a result,
PyObject_GetAttrString() was called twice if close() was present.

To get rid of PyObject_HasAttrString() while keeping the same behaviour,
the PyObject_CallMethod() call has been decomposed into separate calls of
PyObject_GetAttrString() and PyObject_CallFunction().
</pre>
</div>
</content>
</entry>
<entry>
<title>Python: fixed an object leak when response close() is called.</title>
<updated>2019-11-14T14:48:48+00:00</updated>
<author>
<name>Valentin Bartenev</name>
<email>vbart@nginx.com</email>
</author>
<published>2019-11-14T14:48:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=75c2c23bb6cd95a9e08d89f74e6457321d266ed2'/>
<id>75c2c23bb6cd95a9e08d89f74e6457321d266ed2</id>
<content type='text'>
On success, PyObject_CallMethod() returns a new reference to
the result of the call, which previously got lost.

Also, error logging on failure was added.

The issue was introduced by b0148ec28c4d.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
On success, PyObject_CallMethod() returns a new reference to
the result of the call, which previously got lost.

Also, error logging on failure was added.

The issue was introduced by b0148ec28c4d.
</pre>
</div>
</content>
</entry>
<entry>
<title>Python: refactored nxt_python_request_handler().</title>
<updated>2019-11-14T14:48:48+00:00</updated>
<author>
<name>Valentin Bartenev</name>
<email>vbart@nginx.com</email>
</author>
<published>2019-11-14T14:48:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/unit.git/commit/?id=c667bb446d866f1a1a786fa9a3b3ecd06d163cfb'/>
<id>c667bb446d866f1a1a786fa9a3b3ecd06d163cfb</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
