diff options
author | Max Romanov <max.romanov@nginx.com> | 2017-10-19 17:37:02 +0300 |
---|---|---|
committer | Max Romanov <max.romanov@nginx.com> | 2017-10-19 17:37:02 +0300 |
commit | 6031c63225838d6bc266c4f015d9a1085f600324 (patch) | |
tree | 5cf5e63f69820d087a91ebdcc786c46cd5bc1be0 /src/nxt_port_memory.h | |
parent | 6532e46465276efcedae299ce290eb8dff0ece57 (diff) | |
download | unit-6031c63225838d6bc266c4f015d9a1085f600324.tar.gz unit-6031c63225838d6bc266c4f015d9a1085f600324.tar.bz2 |
Introducing mmap_handler to count references to shared memory.
"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.
Diffstat (limited to '')
-rw-r--r-- | src/nxt_port_memory.h | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/nxt_port_memory.h b/src/nxt_port_memory.h index 51c40411..d1f29df8 100644 --- a/src/nxt_port_memory.h +++ b/src/nxt_port_memory.h @@ -11,8 +11,9 @@ #define PORT_MMAP_MIN_SIZE (3 * sizeof(uint32_t)) typedef struct nxt_port_mmap_header_s nxt_port_mmap_header_t; +typedef struct nxt_port_mmap_handler_s nxt_port_mmap_handler_t; -void nxt_port_mmaps_destroy(nxt_port_mmaps_t *port_mmaps, nxt_bool_t free); +void nxt_port_mmaps_destroy(nxt_port_mmaps_t *port_mmaps, nxt_bool_t free_elts); /* * Allocates nxt_but_t structure from port's mem_pool, assigns this buf 'mem' @@ -27,7 +28,7 @@ nxt_port_mmap_get_buf(nxt_task_t *task, nxt_port_t *port, size_t size); nxt_int_t nxt_port_mmap_increase_buf(nxt_task_t *task, nxt_buf_t *b, size_t size, size_t min_size); -nxt_port_mmap_header_t * +nxt_port_mmap_handler_t * nxt_port_incoming_port_mmap(nxt_task_t *task, nxt_process_t *process, nxt_fd_t fd); |