summaryrefslogtreecommitdiffhomepage
path: root/src/nxt_port_memory.c (follow)
AgeCommit message (Collapse)AuthorFilesLines
2024-06-18Use octal instead of mode macrosAlejandro Colomar1-4/+2
They are more readable. And we had a mix of both styles; there wasn't really a consistent style. Tested-by: Andrew Clayton <a.clayton@nginx.com> Reviewed-by: Andrew Clayton <a.clayton@nginx.com> Signed-off-by: Alejandro Colomar <alx@kernel.org>
2024-03-11Avoiding arithmetic ops with NULL pointer in nxt_port_mmap_getAndrei Zeliankou1-0/+6
Can be reproduced by test/test_settings.py::test_settings_send_timeout with enabled UndefinedBehaviorSanitizer. Reviewed-by: Andrew Clayton <a.clayton@nginx.com>
2022-06-07Removing unused tracking fields and functions.Max Romanov1-131/+0
The message tracking is unused since 1d84b9e4b459 commit. This fixes the issue found by Coverity (CID 376263).
2021-10-27Fixed memleaks if PID checks fail in nxt_port_incoming_port_mmap().Valentin Bartenev1-11/+12
Memory allocated for "mem" and "mmap_handler" leaked in that case. Also removed one dead assigment of "hdr" pointer.
2021-10-26Fixed a potential descriptor leak if mmap() failed.Valentin Bartenev1-0/+1
2021-03-02Closing app outgoing shared memory file descriptor.Max Romanov1-0/+5
This fixes file descriptor leakage in router. Shared memory file used to send data from router to application. These files are shared among all processes of same application and router keeps the opened file descriptor since 06017e6e3a5f commit.
2020-10-28Router: broadcasting the SHM_ACK message to all process ports.Max Romanov1-9/+37
2020-08-11Changing router to application shared memory exchange protocol.Max Romanov1-50/+23
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-07-25Using plain shared memory for configuration pass.Max Romanov1-57/+78
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-03-09Refactor of process management.Tiago Natel de Moura1-1/+1
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-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.
2019-12-24Introducing port messages to notify about out of shared memory.Max Romanov1-0/+19
- OOSM (out of shared memory). Sent by application process to router when application reaches the limit of allocated shared memory and needs more. - SHM_ACK. Sent by router to application when the application's shared memory is released and the OOSM flag is enabled for the segment. This implements blocking mode (the library waits for SHM_ACK in case of out of shared memory condition and retries allocating the required memory amount) and non-blocking mode (the library notifies the application that it's out of shared memory and returns control to the application module that sets up the output queue and puts SHM_ACK in the main message loop).
2019-08-16Fixing multi-thread port write racing conditions.Max Romanov1-3/+3
2019-03-11Style.Andrey Zelenkov1-2/+2
2018-08-06Unit application library.Max Romanov1-2/+2
Library now used in all language modules. Old 'nxt_app_*' code removed. See src/test/nxt_unit_app_test.c for usage sample.
2018-07-12Enabled body buffer shared memory segmentation.Max Romanov1-7/+7
Changeset #699 fixes shared memory allocation: continous buffer with requested size should be allocated or function failed. For body longer than 10 Mb, this allocation will definitely fails. For body buffer it is not required to send it in a single continous buffer, so, need to request minimum reasonable amount of shared memory and try to extend it, if possible or allocate next buffer.
2018-06-20Fixed allocation of multiple shared memory chunks.Max Romanov1-29/+39
Previously, one shared memory chunk was allocated under mutex and other chunks (if required) were allocated using atomic operations. So such allocation is not guaranteed and the result buffer can be less than requested. This commit moves multiple chunks allocation under mutex and guarantees the result buffer is large enough.
2018-04-05Style.Valentin Bartenev1-2/+2
2018-03-06Added support for shm_open(SHM_ANON) extension.Sergey Kandaurov1-0/+12
2018-03-05Reduced number of critical log levels.Valentin Bartenev1-10/+3
2018-02-20Removed unwanted assertions.Max Romanov1-5/+10
2018-02-09Made nxt_assert() statements to be compiled only with debug.Valentin Bartenev1-1/+7
2018-02-07Style fixes.Andrey Zelenkov1-1/+1
2018-01-24Fixed formatting in nxt_sprintf() and logging.Sergey Kandaurov1-5/+5
2018-01-11Fixed DragonFly BSD shared memory implementation.Igor Sysoev1-1/+1
2017-12-28Changed nxt_mp_retain() and nxt_mp_release() interfaces.Igor Sysoev1-2/+6
2017-12-27Implementing the ability to cancel request before worker starts processing it.Max Romanov1-36/+175
2017-11-20Fixing Coverity warnings.Max Romanov1-1/+2
CID 200496 CID 200494 CID 200490 CID 200489 CID 200483 CID 200482 CID 200472 CID 200465
2017-10-25Avoiding compilation on systems with no working shared memory.Valentin Bartenev1-0/+4
2017-10-19Introducing mmap_handler to count references to shared memory.Max Romanov1-84/+137
"All problems in computer science can be solved by another level of indirection" Butler Lampson Completion handlers for application response buffers executed after sending the data to client. Application worker can be stopped right after send response buffers to router. Worker stop causes removal of all data structures for the worker. To prevent shared memory segment unmap, need to count the number of buffers which uses it. So instead of direct reference to shared memory, need to reference to intermediate 'handler' structure with use counter and pointer to shared memory.
2017-10-19Supporting concurrent shared memory fd receive in router.Max Romanov1-86/+64
Two different router threads may send different requests to single application worker. In this case shared memory fds from worker to router will be send over 2 different router ports. These fds will be received and processed by different threads in any order. This patch made possible to add incoming shared memory segments in arbitrary order. Additionally, array and memory pool are no longer used to store segments because of pool's single threaded nature. Custom array-like structure nxt_port_mmaps_t introduced.
2017-10-19Introducing src_pid for mmap header for accurate buf completion.Max Romanov1-13/+25
This allows to use shared memory to communicate with main process. This patch changes shared memory segment format and breaks compatibility with older modules.
2017-10-04Using engine memiory pool for port write allocations.Max Romanov1-2/+2
To allow use port from different threads, the first step is to avoid using port's memory pool for temporary allocations required to send data through the port. Including but not limited by: - buffers for data; - send message structures; - new mmap fd notifications; It is still safe to use port memory pool for incoming buffers allocations because recieve operation bound to single thread.
2017-09-18Fixing shared memory thread safety issue.Max Romanov1-1/+6
Do not reuse shared memory segment with different port until this segment successfully received and indexed on other side. However, segment can be used to transfer data via the port it was sent at any time.
2017-09-06Style fixes.Igor Sysoev1-11/+17
2017-08-31nginext has been renamed to unit.Igor Sysoev1-1/+1
2017-08-11Request body read state implemented.Max Romanov1-12/+22
With specific timeout and buffer size settings.
2017-08-02Added basic port error handler.Max Romanov1-11/+3
2017-08-02Runtime processes protected with mutex.Max Romanov1-1/+1
2017-08-02Freed mmap memory filled with 0xA5.Max Romanov1-0/+6
2017-08-02Added bit flags to type parameter of nxt_port_socket_write().Max Romanov1-41/+1
NXT_PORT_MSG_LAST - mark message as last; NXT_PORT_MSG_CLOSE_FD - close fd right after send; Type constants altered to include last flag for single buffer messages. Last sign is critical for coming port RPC layer. Handlers unregistered on last message. Create sync buffer is not convenient, extra parameter is better.
2017-07-12New process port exchange changed. READY message type introduced.Max Romanov1-12/+56
Application process start request DATA message from router to master. Master notifies router via NEW_PORT message after worker process become ready.
2017-07-10Introducing thread-safe nxt_random().Igor Sysoev1-1/+1
2017-07-07Memory pool thread safety checks in DEBUG build and usage fixes.Max Romanov1-2/+8
2017-07-07Redirecting buffer completion handler to specific engine.Max Romanov1-13/+16
There is a case in router where we use port in router connection thread. Buffers are allocated within connection memory pool which can be used only in this router thread. sendmsg() can be postponed into main router thread and completion handler will compare current engine and post itself to correct engine.
2017-06-23Incoming and outgoing port_mmap arrays are protected with mutexes.Max Romanov1-0/+12
2017-06-23Moved message size to nxt_port_recv_msg_t for convenience.Max Romanov1-1/+3
2017-06-23Store pointer to shared memory start in buf->parent.Max Romanov1-231/+202
nxt_port_mmap_t stored in arrays and it is unsafe to store pointer to array element. Shared memory structures and macros moved to separate header file to be used by GO package.
2017-06-23Store mem_pool in buf->data instead of port for consistency.Max Romanov1-13/+33
2017-06-23Shorter shared memory name generated.Max Romanov1-2/+2