summaryrefslogtreecommitdiffhomepage
AgeCommit message (Collapse)AuthorFilesLines
2020-08-13Added version 1.19.0 CHANGES.Valentin Bartenev2-0/+156
2020-08-13Tests: set root by unprivilaged user.Tiago Natel de Moura1-0/+27
2020-08-13Tests: added test with error on loading application.Andrei Zeliankou1-0/+11
2020-08-13Tests: added variables tests.Andrei Zeliankou1-0/+94
2020-08-13Fixing router assertion in result of application prefork error.Max Romanov1-0/+8
Buffer for application prefork request allocated from temp conf mem_pool. If error response from main process received before buffer completion handler, temp conf mem_pool destroyed and router may crash in completion handler. Assertion "src/nxt_buf.c:208 assertion failed: data == b->parent" triggered when NXT_DEBUG_ALLOC enabled in configure. This patch disables completion handler and memory allocated for buffer released with memory pool.
2020-08-13Fixed error handling of prefork callback.Tiago Natel de Moura1-14/+21
Previously, an error during the prefork phase triggered assert: src/nxt_port.c:27 assertion failed: port->pair[0] == -1 and resulted in exiting of the main process. This could be easily reproduced by pushing a configuration with "rootfs", when daemon is running without required permissions.
2020-08-13Fixed typo in return value check.Valentin Bartenev1-1/+1
Found by Coverity (CID 361277).
2020-08-13Basic variables support.Valentin Bartenev19-144/+1086
2020-08-12PHP: compatibility with 8.0.0 Beta 1.Remi Collet1-1/+15
This closes #441 PR on GitHub.
2020-08-12Responding with error in case of first process start failure.Max Romanov3-18/+129
After shared application port introducing, request queue in router was removed and requests may stuck forever waiting for another process start.
2020-08-12Fixing issues found by static analyzer.Max Romanov1-2/+4
2020-08-11Fixing return value initialization.Max Romanov1-19/+25
2020-08-11Style fixes for 2 file descriptors transfer over port.Max Romanov7-110/+115
Two consecutive fd and fd2 fields replaced with array.
2020-08-11Moving file descriptor blocking to libunit.Max Romanov3-19/+39
The default libunit behavior relies on blocking the recv() call for port file descriptors, which an application may override if needed. For external applications, port file descriptors were toggled to blocking mode before the exec() call. If the exec() call failed, descriptor remained blocked, so the process hanged while trying to read from it. This patch moves file descriptor mode switch inside libunit.
2020-08-11Wrapping close() call in libunit for logging.Max Romanov1-35/+44
2020-08-11Introducing application and port shared memory queues.Max Romanov11-311/+1793
The goal is to minimize the number of syscalls needed to deliver a message.
2020-08-11Circular queues implementations and a test.Max Romanov4-0/+938
- naive circular queue, described in the article "A Scalable, Portable, and Memory-Efficient Lock-Free FIFO Queue" by Ruslan Nikolaev: https://drops.dagstuhl.de/opus/volltexte/2019/11335/pdf/LIPIcs-DISC-2019-28.pdf - circular queue, proposed by Valentin Bartenev in the "Unit router application IPC" design draft
2020-08-11Port message extended to transfer 2 file descriptors.Max Romanov5-27/+81
2020-08-11Made router port message handlers into static functions.Max Romanov2-10/+13
Mostly harmless.
2020-08-11Tests: reducing the number of generated applications.Max Romanov1-1/+3
Each application initializes a shared port with 2 file descriptors, so the test fails because the router reaches the open files limit.
2020-08-11Tests: skipping idle zero timeout.Max Romanov1-0/+1
This is a temporary solution after the 'shared port' patch. The application process becomes idle immediately after creation. Even if it starts processing a request (without acknowledging it yet), it is stopped by the router because an 'out-of-idle-time' event occurs.
2020-08-11Adding debug messages to catch process management issues.Max Romanov1-2/+36
2020-08-11Process structures refactoring in runtime and libunit.Max Romanov4-208/+93
Generic process-to-process shared memory exchange is no more required. Here, it is transformed into a router-to-application pattern. The outgoing shared memory segments collection is now the property of the application structure. The applications connect to the router only, and the process only needs to group the ports.
2020-08-11Introducing the shared application port.Max Romanov12-1229/+894
This is the port shared between all application processes which use it to pass requests for processing. Using it significantly simplifies the request processing code in the router. The drawback is 2 more file descriptors per each configured application and more complex libunit message wait/read code.
2020-08-11Changing router to application shared memory exchange protocol.Max Romanov8-179/+374
The application process needs to request the shared memory segment from the router instead of the latter pushing the segment before sending a request to the application. This is required to simplify the communication between the router and the application and to prepare the router for using the application shared port and then the queue.
2020-08-11Changing router to application port exchange protocol.Max Romanov7-97/+342
The application process needs to request the port from the router instead of the latter pushing the port before sending a request to the application. This is required to simplify the communication between the router and the application and to prepare the router to use the application shared port and then the queue.
2020-08-11Adding a reference counter to the libunit port structure.Max Romanov3-357/+346
The goal is to minimize the number of (pid, id) to port hash lookups which require a library mutex lock. The response port is found once per request, while the read port is initialized at startup.
2020-08-11Libunit refactoring: port management.Max Romanov8-336/+379
- Changed the port management callbacks to notifications, which e. g. avoids the need to call the libunit function - Added context and library instance reference counts for a safer resource release - Added the router main port initialization
2020-08-09Fixing leaked configuration objects.Max Romanov1-4/+30
If there are no listen sockets, the router configuration usage counter remains 0 and never decreases. The only moment to release a configuration is right after a configuration update.
2020-08-09Fixing connection remote sockaddr leakage.Max Romanov1-2/+4
Earlier patch 1bf971f83571 fixes connection leakage. But connection free requires separate remote sockaddr release.
2020-08-09Ruby: fixed gem mount paths.Valentin Bartenev1-4/+2
The gem paths must depend on the specified interpreter. Also, gemdir looks redundant as it's already included in Gem.default_path().
2020-08-09Ruby: simplified commands in ./configure script.Valentin Bartenev1-9/+9
There is no reason to use printf instead of just print. No functional changes.
2020-08-09Ruby: removed unused variable from ./configure script.Valentin Bartenev1-1/+0
2020-08-08Configure: verifying the Ruby library path.Valentin Bartenev1-4/+10
An attempt to build a Ruby module for a custom Ruby installation that has the same major version as the system Ruby may unexpectedly cause the use of the system Ruby library. This closes #449 issue on GitHub.
2020-08-07Node.js: correct port data memory release.Max Romanov1-1/+15
According to libuv documentation, uv_poll_t memory should be released in a callback function passed to uv_close(). Otherwise, the Node.js application process may crash at exit.
2020-08-07Fixing listen event connection leakage.Max Romanov1-0/+4
A connection object is allocated in advance for each listen event object to be used for the established connection. This connection needs to be freed when the listen event is destroyed.
2020-08-05Improved mkstemp() error reporting.Valentin Bartenev1-1/+1
The invocation parameters should be logged as well, notably the path of the file that is failed to be created. Also, log level changed to ALERT as it's quite critical error.
2020-08-05Fixed nxt_conn_accept_alloc() behavior in low memory conditions.Valentin Bartenev1-5/+5
Earlier, if nxt_mp_create() failed to allocate memory while accepting a new connection, the resulting NULL was subsequently passed to nxt_mp_destroy(), crashing the process. More, if nxt_mp_create() was successful but nxt_sockaddr_cache_alloc() failed, the connection object wasn't destroyed properly, leaving the connection counter in an inconsistent state. Repeated, this condition lowered the connection capacity of the process and could eventually prevent it from accepting connections altogether.
2020-07-31Isolation: fixed the generation of mounts table.Tiago Natel de Moura6-23/+28
Since the introduction of rootfs feature, some language modules can't be configured multiple times. Now the configure generates a separate nxt_<module>_mounts.h for each module compiled.
2020-07-28PHP: fixed version comparison in configure script.Tiago Natel de Moura1-2/+2
Some PPAs for Ubuntu package PHP with versions like: 7.2.28-3+ubuntu18.04.1+deb.sury.org+1 But the script expected only "X.Y.Z". The issue was introduced in: http://hg.nginx.org/unit/rev/2ecb15904ba5
2020-07-28Configuration: fixed buffer over-read in pattern validation.Axel Duch1-2/+3
There was an undefined behavior in the validation function, caused by testing one character after the string if a wildcard was at the end.
2020-07-28Tests: added PHP test with time check in error log messages.Andrei Zeliankou2-0/+29
2020-07-28Tests: fixed double stop() call for some tests.Andrei Zeliankou1-6/+11
2020-07-28Tests: style.Andrei Zeliankou4-7/+5
2020-07-25Using plain shared memory for configuration pass.Max Romanov4-83/+152
There is no restrictions on configration size and using segmented shared memory only doubles memory usage because to parse configration on router side, it needs to be 'plain' e. g. located in single continous memory buffer.
2020-07-24Configuration: added checking for presence of mandatory fields.Valentin Bartenev3-13/+131
2020-07-24Added missing ending indicator in object members validation lists.Valentin Bartenev1-1/+5
This fixes undefined behaviour due to array over-read if an unknown parameter is specified in an uidmap, a gidmap, or a php target object.
2020-07-24Configuration: removing redundant check.Axel Duch1-3/+3
Thanks to 洪志道 (Hong Zhi Dao).
2020-07-24Minor changes and renaming an NJS artifact to NXT.Axel Duch1-3/+3
This is partially related to #434 issue on Github. Thanks to 洪志道 (Hong Zhi Dao).
2020-07-23Fixing request_app_link reference counting.Max Romanov1-4/+2
Racing conditions reproduced periodically on test_python_process_switch.