summaryrefslogtreecommitdiffhomepage
AgeCommit message (Collapse)AuthorFilesLines
2019-11-14Merged with the default branch.1.13.0-1Andrei Belov86-720/+3555
2019-11-14Added tag 1.13.0 for changeset 3313bf222e6eValentin Bartenev1-0/+1
2019-11-14Generated Dockerfiles for Unit 1.13.0.1.13.0Valentin Bartenev9-9/+9
2019-11-14Added version 1.13.0 CHANGES.Valentin Bartenev2-0/+90
2019-11-14Tests: Python exception tests.Andrei Zeliankou2-0/+202
2019-11-14Python: avoiding buffering of exception backtraces.Valentin Bartenev1-7/+47
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.
2019-11-14Python: removed wrong PyErr_Print() call.Valentin Bartenev1-1/+0
PyCallable_Check() doesn't produce errors. The needless call was introduced in fdd6ed28e3b9.
2019-11-14Python: optimized response object close() calling.Valentin Bartenev1-7/+14
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().
2019-11-14Python: fixed an object leak when response close() is called.Valentin Bartenev1-10/+19
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.
2019-11-14Python: refactored nxt_python_request_handler().Valentin Bartenev1-56/+31
2019-11-14Python: fixed potential object leak in case of allocation error.Valentin Bartenev1-0/+2
2019-11-14Python: improved error handling if response object isn't iterable.Valentin Bartenev1-0/+1
According to the documentation, PyObject_GetIter(): | Raises TypeError and returns NULL if the object cannot be iterated. Previously, this exception wasn't printed or cleared and remained unhandled.
2019-11-14Python: fixed handling of errors on response object iteration.Valentin Bartenev1-8/+15
According to the documentation, PyIter_Next(): | If there are no remaining values, returns NULL with no exception set. | If an error occurs while retrieving the item, returns NULL and passes | along the exception. Previously, this exception wasn't properly handled and the response was finalized as successful. This issue was introduced in b0148ec28c4d. A check for PyErr_Occurred() located in the code below might print this traceback or occasionally catch an exception from one of the two response close() calls. Albeit that exceptions from the close() calls also need to be catched, it's clear that this particular check wasn't supposed to do so. This is another issue and it will be fixed later.
2019-11-14Tests: proxy tests.Andrei Zeliankou2-0/+647
2019-11-14Tests: run_process() and stop_processes() introduced.Andrei Zeliankou1-0/+22
2019-11-14Tests: waitforsocket() introduced.Andrei Zeliankou1-0/+18
2019-11-14Processing inconsistent proxied response length.Igor Sysoev4-3/+32
Keepalive connection is disabled if upstream response length differs from specified in the "Content-Length" field value.
2019-11-14Initial proxy support.Igor Sysoev16-44/+1264
2019-11-14Introduced chained buffer completion handlers.Igor Sysoev9-31/+113
2019-11-14Using event engine memory buffers in HTTP/1 layer.Igor Sysoev4-15/+18
2019-11-14Introduced event engine memory buffers.Igor Sysoev4-22/+83
2019-11-14Event engine memory cache refactored.Igor Sysoev3-14/+48
2019-11-14Using request task.Igor Sysoev3-2/+13
2019-11-14Replacing pass with action.Igor Sysoev6-110/+162
2019-11-14Fixed connect(2) errors processing on old Linuxes.Igor Sysoev4-30/+61
While connect(2) states that non-blocking connect should use EPOLLOUT: EINPROGRESS The socket is non-blocking and the connection cannot be completed immediately. It is possible to select(2) or poll(2) for completion by selecting the socket for writing. After select(2) indicates writability, use getsockopt(2) to read the SO_ERROR option at level SOL_SOCKET to determine whether connect() completed successfully (SO_ERROR is zero) or unsuccessfully (SO_ERROR is one of the usual error codes listed here, explaining the reason for the failure). On connect error, Linux 2.6.32 (CentOS 6) may return EPOLLRDHUP, EPOLLERR, EPOLLHUP, EPOLLIN, but not EPOLLOUT.
2019-11-13Tests: fixed websocket tests.Andrei Zeliankou3-81/+38
2019-11-13Tests: added Python test with threading.Andrei Zeliankou2-0/+46
2019-11-13Python: releasing GIL while waiting for a request.Valentin Bartenev1-15/+23
It unblocks other threads that can be forked by the application to work in background. This closes #336 issue on GitHub.
2019-11-13Tests: added Ruby test with constants.Andrey Zelenkov2-0/+38
2019-11-13Ruby: fixing initialization sequence.Max Romanov1-4/+7
There was a change (ruby/ruby@6c70fed) in Ruby 2.6 that moved RUBY_DESCRIPTION global constant definition out of Init_version(). Unit initialized Ruby incorrectly, so the constant was not defined. This closes #330 issue on GitHub.
2019-11-11Fixing libunit 'off by 2' issue in library.Max Romanov4-16/+27
Name and value in each header are 0-terminated, so additional 2 bytes should be allocated for them. There were several attempts to add these 2 bytes to headers in language modules, but some modules weren't updated. Also, adding these 2 bytes is specific to the implementation which may be changed later, so extending this mechanics to modules may cause errors.
2019-11-08Tests: fixed operator in http.py.Andrey Zelenkov1-1/+1
2019-11-07Respecting AR environment variable to configure ar binary.Valentin Bartenev3-12/+22
2019-10-29Process port refactoring.Hong Zhi Dao6-67/+65
- Introduced nxt_runtime_process_port_create(). - Moved nxt_process_use() into nxt_process.c from nxt_runtime.c. - Renamed nxt_runtime_process_remove_pid() as nxt_runtime_process_remove(). - Some public functions transformed to static. This closes #327 issue on GitHub.
2019-10-29Allocating process init struct from runtime memory pool.Max Romanov2-17/+14
This avoids memory leak reports from the address sanitizer.
2019-10-28Added clone syscall check for uid/gid mapping.Tiago Natel1-1/+1
Now it's possible to pass -DNXT_HAVE_CLONE=0 for debugging.
2019-10-28Releasing the memory of removed thread pools at exit.Tiago Natel1-0/+2
2019-10-23Tests: added test with invalid "working_directory" value.Andrey Zelenkov1-0/+12
2019-10-23Tests: more URI normalization tests.Andrey Zelenkov1-8/+52
2019-10-23Tests: added USR1 signal test for unit.log.Andrey Zelenkov3-37/+101
2019-10-23Tests: more static tests.Andrey Zelenkov1-0/+6
2019-10-23Tests: improved handshake for websocket tests.Andrey Zelenkov2-7/+15
2019-10-23Tests: style.Andrey Zelenkov1-1/+3
2019-10-23Tests: check initial configuration in test_access_log.py.Andrey Zelenkov1-1/+5
2019-10-23Tests: check initial configuration in test_routing.py.Andrey Zelenkov1-27/+31
2019-10-23Tests: added flush() in "errors_write" Python application.Andrey Zelenkov1-0/+1
2019-10-23Python: fixing Python 3.8 build with clang.Max Romanov2-54/+8
Python 3.8 has 'tp_print' field in PyTypeObject struct. This field is attributed as deprecated. So, clang generates warning (which is turned to error) as a result of initializing this field. From the other hand, it is impossible to omit this field in positional initialization. The solution is to use designated initializer. Silencing usage message during configure python. This is related to #331 issue on GitHub.
2019-10-22Improved error logging when uid/gid map is not properly set.Tiago Natel1-2/+30
When using "credential: true", the new namespace starts with a completely empty uid and gid ranges. Then, any setuid/setgid/setgroups calls using ids not properly mapped with uidmap and gidmap fields return EINVAL, meaning the id is not valid inside the new namespace.
2019-10-22Fixing process crash in case of module load error.Max Romanov1-0/+3
This is related to #330 issue on GitHub.
2019-10-22Fixing idle connection close function.Max Romanov1-1/+1
There was a typo: nxt_queue_head() used instead of nxt_queue_first() in connection iteration loop. This prevents idle connection close on quit. This closes #334 issue on GitHub. Thanks to 洪志道 (Hong Zhi Dao).