Deleted Added
1
2/*
3 * Copyright (C) Max Romanov
4 * Copyright (C) NGINX, Inc.
5 */
6
7#include <nxt_main.h>
8

--- 21 unchanged lines hidden (view full) ---

30nxt_port_mmap_buf_completion(nxt_task_t *task, void *obj, void *data)
31{
32 u_char *p;
33 nxt_mp_t *mp;
34 nxt_buf_t *b;
35 nxt_chunk_id_t c;
36 nxt_port_mmap_header_t *hdr;
37
38 b = obj;
39
40 nxt_debug(task, "mmap buf completion: %p %p", b, b->mem.start);
41
42 mp = b->data;
43
44#if (NXT_DEBUG)
45 if (nxt_slow_path(data != b->parent)) {

--- 20 unchanged lines hidden (view full) ---

66
67 while (p < b->mem.end) {
68 nxt_port_mmap_set_chunk_free(hdr, c);
69
70 p += PORT_MMAP_CHUNK_SIZE;
71 c++;
72 }
73
74 nxt_buf_free(mp, b);
75}
76
77
78nxt_port_mmap_header_t *
79nxt_port_incoming_port_mmap(nxt_task_t *task, nxt_process_t *process,
80 nxt_fd_t fd)
81{
82 void *mem;

--- 62 unchanged lines hidden (view full) ---

145
146static void
147nxt_port_mmap_send_fd_buf_completion(nxt_task_t *task, void *obj, void *data)
148{
149 nxt_fd_t fd;
150 nxt_buf_t *b;
151 nxt_mp_t *mp;
152
153 b = obj;
154 mp = b->data;
155 fd = (nxt_fd_t) (intptr_t) data;
156
157#if (NXT_DEBUG)
158 if (nxt_slow_path(data != b->parent)) {
159 nxt_log_alert(task->log, "completion data (%p) != b->parent (%p)",
160 data, b->parent);
161 nxt_abort();
162 }
163#endif
164
165 nxt_debug(task, "mmap fd %FD has been sent", fd);
166
167 nxt_fd_close(fd);
168
169 nxt_buf_free(mp, b);
170}
171
172
173static nxt_port_mmap_header_t *
174nxt_port_new_port_mmap(nxt_task_t *task, nxt_process_t *process,
175 nxt_port_t *port)
176{
177 void *mem;

--- 69 unchanged lines hidden (view full) ---

247 PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
248
249 if (nxt_slow_path(mem == MAP_FAILED)) {
250 goto remove_fail;
251 }
252
253 port_mmap->hdr = mem;
254
255 b = nxt_buf_mem_alloc(port->mem_pool, 0, 0);
256 if (nxt_slow_path(b == NULL)) {
257 goto remove_fail;
258 }
259
260 b->completion_handler = nxt_port_mmap_send_fd_buf_completion;
261 b->data = port->mem_pool;
262 b->parent = (void *) (intptr_t) fd;
263
264 /* Init segment header. */
265 hdr = port_mmap->hdr;
266
267 nxt_memset(hdr->free_map, 0xFFU, sizeof(hdr->free_map));
268
269 hdr->id = process->outgoing->nelts - 1;

--- 121 unchanged lines hidden (view full) ---

391
392 nxt_debug(task, "request %z bytes shm buffer", size);
393
394 if (nxt_slow_path(size > PORT_MMAP_DATA_SIZE)) {
395 nxt_debug(task, "requested size (%z bytes) too big", size);
396 return NULL;
397 }
398
399 b = nxt_mp_zalloc(port->mem_pool, NXT_BUF_PORT_MMAP_SIZE);
400 if (nxt_slow_path(b == NULL)) {
401 return NULL;
402 }
403
404 b->data = port->mem_pool;
405 b->completion_handler = nxt_port_mmap_buf_completion;
406 b->size = NXT_BUF_PORT_MMAP_SIZE;
407
408 nxt_buf_set_port_mmap(b);
409
410 hdr = nxt_port_mmap_get(task, port, &c, size);
411 if (nxt_slow_path(hdr == NULL)) {
412 nxt_buf_free(port->mem_pool, b);
413 return NULL;
414 }
415
416 b->parent = hdr;
417 b->mem.start = nxt_port_mmap_chunk_start(hdr, c);
418 b->mem.pos = b->mem.start;
419 b->mem.free = b->mem.start;
420 b->mem.end = b->mem.start + PORT_MMAP_CHUNK_SIZE;
421
422 nchunks = size / PORT_MMAP_CHUNK_SIZE;
423 if ((size % PORT_MMAP_CHUNK_SIZE) != 0 || nchunks == 0) {
424 nchunks++;

--- 87 unchanged lines hidden (view full) ---

512 nxt_buf_t *b;
513 nxt_port_mmap_header_t *hdr;
514
515 hdr = nxt_port_get_port_incoming_mmap(task, spid, mmap_msg->mmap_id);
516 if (nxt_slow_path(hdr == NULL)) {
517 return NULL;
518 }
519
520 b = nxt_mp_zalloc(port->mem_pool, NXT_BUF_PORT_MMAP_SIZE);
521 if (nxt_slow_path(b == NULL)) {
522 return NULL;
523 }
524
525 b->data = port->mem_pool;
526 b->completion_handler = nxt_port_mmap_buf_completion;
527 b->size = NXT_BUF_PORT_MMAP_SIZE;
528
529 nxt_buf_set_port_mmap(b);
530
531 nchunks = mmap_msg->size / PORT_MMAP_CHUNK_SIZE;
532 if ((mmap_msg->size % PORT_MMAP_CHUNK_SIZE) != 0) {
533 nchunks++;
534 }
535

--- 18 unchanged lines hidden (view full) ---

554 nxt_port_mmap_msg_t *mmap_msg;
555 nxt_port_mmap_header_t *hdr;
556
557 nxt_debug(task, "prepare %z bytes message for transfer to process %PI "
558 "via shared memory", sb->size, port->pid);
559
560 bsize = sb->niov * sizeof(nxt_port_mmap_msg_t);
561
562 b = nxt_buf_mem_alloc(port->mem_pool, bsize, 0);
563 if (nxt_slow_path(b == NULL)) {
564 return;
565 }
566
567 mmap_msg = (nxt_port_mmap_msg_t *) b->mem.start;
568 bmem = msg->buf;
569
570 for (i = 0; i < sb->niov; i++, mmap_msg++) {

--- 135 unchanged lines hidden ---