summaryrefslogtreecommitdiffhomepage
path: root/src (follow)
AgeCommit message (Collapse)AuthorFilesLines
2020-03-09Refactor of process management.Tiago Natel de Moura26-1330/+1541
The process abstraction has changed to: setup(task, process) start(task, process_data) prefork(task, process, mp) The prefork() occurs in the main process right before fork. The file src/nxt_main_process.c is completely free of process specific logic. The creation of a process now supports a PROCESS_CREATED state. The The setup() function of each process can set its state to either created or ready. If created, a MSG_PROCESS_CREATED is sent to main process, where external setup can be done (required for rootfs under container). The core processes (discovery, controller and router) doesn't need external setup, then they all proceeds to their start() function straight away. In the case of applications, the load of the module happens at the process setup() time and The module's init() function has changed to be the start() of the process. The module API has changed to: setup(task, process, conf) start(task, data) As a direct benefit of the PROCESS_CREATED message, the clone(2) of processes using pid namespaces now doesn't need to create a pipe to make the child block until parent setup uid/gid mappings nor it needs to receive the child pid.
2020-05-28Moving nxt_stream_ident to shared memory.Max Romanov3-3/+31
This aims to avoid stream id clashes after router restart.
2020-05-28Added NULL check for engine->port.Max Romanov1-2/+4
This is required to handle REMOVE_PID messages if router engine initialization is incomplete.
2020-05-28Closing unsent file descriptors from port queue.Max Romanov1-0/+6
After a process exits, all ports linked to it from other processes should be closed. All unsent file descriptors in port queue, marked as "close after send", should be closed to avoid resource leakage.
2020-05-20Static: fixed potential undefined behavior in memcpy().Valentin Bartenev1-1/+1
According to the C standard, pointer arguments passed to memcpy() calls shall still have valid values. NULL is considered as invalid. Found with GCC Static Analyzer.
2020-05-20PHP: building with PHP 8 (development version).Remi Collet1-0/+8
2020-05-15Fixed global constant declaration (appeared in 9af10e099d09).Valentin Bartenev1-1/+1
This fixes building with GCC 10, which is default to -fno-common. See: https://gcc.gnu.org/gcc-10/porting_to.html
2020-05-15Router: removed two unused assignments.Valentin Bartenev2-5/+2
This should resolve some static analyzers warnings.
2020-05-14Router: decode uri and args.Axel Duch4-60/+381
2020-05-14PHP: implemented "targets" option.Valentin Bartenev11-260/+509
This allows to specify multiple subsequent targets inside PHP applications. For example: { "listeners": { "*:80": { "pass": "routes" } }, "routes": [ { "match": { "uri": "/info" }, "action": { "pass": "applications/my_app/phpinfo" } }, { "match": { "uri": "/hello" }, "action": { "pass": "applications/my_app/hello" } }, { "action": { "pass": "applications/my_app/rest" } } ], "applications": { "my_app": { "type": "php", "targets": { "phpinfo": { "script": "phpinfo.php", "root": "/www/data/admin", }, "hello": { "script": "hello.php", "root": "/www/data/test", }, "rest": { "root": "/www/data/example.com", "index": "index.php" }, } } } }
2020-05-14Configuration: URI encoding in the "pass" option.Valentin Bartenev4-65/+119
This is useful to escape "/" in path fragments. For example, in order to reference the application named "foo/bar": { "pass": "applications/foo%2Fbar" }
2020-05-12Waiting for router instead of reporting to user on config update.Max Romanov1-24/+25
2020-05-12Blocking config change when applying the initial router config.Max Romanov1-11/+32
2020-04-16Using malloc/free for the http fields hash.Max Romanov9-52/+24
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().
2020-04-15Fixed memory leak occurring upon failure to accept a connection.Igor Sysoev2-12/+11
2020-04-15Fixed crash that occurs when idle connections are closed forcibly.Igor Sysoev3-35/+77
2020-04-15Disabled epoll error processing when socket events are inactive.Igor Sysoev1-0/+7
2020-04-14Completing chained shared memory buffers.Max Romanov1-3/+14
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.
2020-04-10Resolving a racing condition while adding ports on the app's side.Max Romanov4-12/+43
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.
2020-04-08Controller: improved handling of unix domain control socket.Valentin Bartenev4-14/+89
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.
2020-04-08Controller: fixed cleaning up of control socket file in some cases.Valentin Bartenev1-6/+20
Previously, the unix domain control socket file might have been left in the file system after a failed nxt_listen_socket_create() call.
2020-04-08Removed unused code related to testing of address binding.Valentin Bartenev7-31/+9
2020-04-08Controller: eliminated extra control socket's sockaddr copying.Valentin Bartenev1-11/+1
2020-04-08Node.js: fixing Server.listen() method.Max Romanov1-1/+11
This is required for Express framework compatibility. This closes #418 issue on GitHub.
2020-04-06Fixing 'find & add' racing condition in connected ports hash.Max Romanov4-32/+29
Missing error log messages added.
2020-04-01Fixed build with Clang 10, broken by 32578e837322.Valentin Bartenev1-1/+3
This silences the -Wimplicit-int-float-conversion warning.
2020-03-30Rational number support in upstream server weight.Igor Sysoev2-24/+38
2020-03-30Configuration: support for rational numbers.Valentin Bartenev8-170/+135
2020-03-30Fixing application process infinite loop.Max Romanov1-21/+28
Main process exiting before app process init may have caused hanging.
2020-03-30Handling change file message in libunit.Max Romanov1-0/+10
This is required for proper log file rotation action.
2020-03-30Attributing libunit logging function for arguments validation.Max Romanov4-10/+31
2020-03-21Implemented "location" option for "return" action.Valentin Bartenev5-2/+60
This allows to specify redirects: { "action": { "return": 301, "location": "https://www.example.com/" } }
2020-03-27Added nxt_is_complex_uri_encoded()/nxt_encode_complex_uri().Valentin Bartenev2-44/+158
2020-03-27Updated URI escaping table for better conformity with RFC 3986.Valentin Bartenev1-6/+4
Now '>', '<', '"', '^', '\', '}', '|', '{', and '`' are also escaped.
2020-03-27Implemented "return" action.Valentin Bartenev4-4/+95
The "return" action can be used to immediately generate a simple HTTP response with an arbitrary status: { "action": { "return": 404 } } This is especially useful for denying access to specific resources.
2020-03-27Initialization of the action object made more consistent.Valentin Bartenev1-3/+3
2020-03-25Configuration: fixed comments parsing.Valentin Bartenev1-1/+5
Unclosed multi-line comments and "/" at the end of JSON shouldn't be allowed.
2020-03-19Completing buffers immediatelyMax Romanov1-5/+2
This fixes crash introduced in 039b00e32e3d.
2020-03-19Completing request header buffers to avoid memory leak.Max Romanov3-22/+29
Before this fix, only persistent connection request buffers were completed. This issue was introduced in dc403927ab0b.
2020-03-17Fixing body fd access racing condition.Max Romanov2-16/+32
To avoid closing the body fd prematurely, the fd value is moved from the request struct to the app link. The body fd should not be closed immediately after the request is sent to the application due to possible request rescheduling.
2020-03-12Using disk file to store large request body.Max Romanov10-36/+441
This closes #386 on GitHub.
2020-03-12Moving request memory pool retain call after RPC data allocation.Max Romanov2-10/+15
If the call is done only after a successful RPC data allocation, its corresponding release call is not missed, which avoids a potential leak.
2020-03-12Checking Content-Length value right after header parse.Max Romanov2-6/+8
The check was moved from the request body read stage.
2020-03-12Python: implementing input readline and line iterator.Max Romanov1-2/+145
2020-03-12Introducing readline function in libunit.Max Romanov4-44/+53
Ruby and Java modules now use this function instead of own implementations.
2020-03-06Round robin upstream added.Igor Sysoev10-34/+653
2020-03-04Legacy upstream code removed.Igor Sysoev4-274/+0
2020-03-04Refactored nxt_http_action.Igor Sysoev3-21/+19
2020-03-11Fixed negative patterns combined with address rules.Axel Duch1-6/+40
2020-03-04PHP: fixed log format in alert.Tiago Natel de Moura1-1/+2
Found by Coverity: CID 354832 and CID 354833.