Deleted
Added
nxt_port_memory.c (90:f9462c69c19e) | nxt_port_memory.c (122:d18727e877c6) |
---|---|
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 | 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 if (nxt_buf_ts_handle(task, obj, data)) { 39 return; 40 } 41 |
|
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 | 42 b = obj; 43 44 nxt_debug(task, "mmap buf completion: %p %p", b, b->mem.start); 45 46 mp = b->data; 47 48#if (NXT_DEBUG) 49 if (nxt_slow_path(data != b->parent)) { --- 20 unchanged lines hidden (view full) --- 70 71 while (p < b->mem.end) { 72 nxt_port_mmap_set_chunk_free(hdr, c); 73 74 p += PORT_MMAP_CHUNK_SIZE; 75 c++; 76 } 77 |
74 nxt_buf_free(mp, b); | 78 nxt_mp_release(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 | 79} 80 81 82nxt_port_mmap_header_t * 83nxt_port_incoming_port_mmap(nxt_task_t *task, nxt_process_t *process, 84 nxt_fd_t fd) 85{ 86 void *mem; --- 62 unchanged lines hidden (view full) --- 149 150static void 151nxt_port_mmap_send_fd_buf_completion(nxt_task_t *task, void *obj, void *data) 152{ 153 nxt_fd_t fd; 154 nxt_buf_t *b; 155 nxt_mp_t *mp; 156 |
157 if (nxt_buf_ts_handle(task, obj, data)) { 158 return; 159 } 160 |
|
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 | 161 b = obj; 162 mp = b->data; 163 fd = (nxt_fd_t) (intptr_t) data; 164 165#if (NXT_DEBUG) 166 if (nxt_slow_path(data != b->parent)) { 167 nxt_log_alert(task->log, "completion data (%p) != b->parent (%p)", 168 data, b->parent); 169 nxt_abort(); 170 } 171#endif 172 173 nxt_debug(task, "mmap fd %FD has been sent", fd); 174 175 nxt_fd_close(fd); 176 |
169 nxt_buf_free(mp, b); | 177 nxt_mp_release(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 | 178} 179 180 181static nxt_port_mmap_header_t * 182nxt_port_new_port_mmap(nxt_task_t *task, nxt_process_t *process, 183 nxt_port_t *port) 184{ 185 void *mem; --- 69 unchanged lines hidden (view full) --- 255 PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); 256 257 if (nxt_slow_path(mem == MAP_FAILED)) { 258 goto remove_fail; 259 } 260 261 port_mmap->hdr = mem; 262 |
255 b = nxt_buf_mem_alloc(port->mem_pool, 0, 0); | 263 b = nxt_buf_mem_ts_alloc(task, port->mem_pool, 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; | 264 if (nxt_slow_path(b == NULL)) { 265 goto remove_fail; 266 } 267 268 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 | 269 b->parent = (void *) (intptr_t) fd; 270 271 /* Init segment header. */ 272 hdr = port_mmap->hdr; 273 274 nxt_memset(hdr->free_map, 0xFFU, sizeof(hdr->free_map)); 275 276 hdr->id = process->outgoing->nelts - 1; --- 121 unchanged lines hidden (view full) --- 398 399 nxt_debug(task, "request %z bytes shm buffer", size); 400 401 if (nxt_slow_path(size > PORT_MMAP_DATA_SIZE)) { 402 nxt_debug(task, "requested size (%z bytes) too big", size); 403 return NULL; 404 } 405 |
399 b = nxt_mp_zalloc(port->mem_pool, NXT_BUF_PORT_MMAP_SIZE); | 406 b = nxt_buf_mem_ts_alloc(task, port->mem_pool, 0); |
400 if (nxt_slow_path(b == NULL)) { 401 return NULL; 402 } 403 | 407 if (nxt_slow_path(b == NULL)) { 408 return NULL; 409 } 410 |
404 b->data = port->mem_pool; | |
405 b->completion_handler = nxt_port_mmap_buf_completion; | 411 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_set_port_mmap(b); 413 414 hdr = nxt_port_mmap_get(task, port, &c, size); 415 if (nxt_slow_path(hdr == NULL)) { |
412 nxt_buf_free(port->mem_pool, b); | 416 nxt_mp_release(port->mem_pool, b); |
413 return NULL; 414 } 415 416 b->parent = hdr; | 417 return NULL; 418 } 419 420 b->parent = hdr; |
421 |
|
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 | 422 b->mem.start = nxt_port_mmap_chunk_start(hdr, c); 423 b->mem.pos = b->mem.start; 424 b->mem.free = b->mem.start; 425 b->mem.end = b->mem.start + PORT_MMAP_CHUNK_SIZE; 426 427 nchunks = size / PORT_MMAP_CHUNK_SIZE; 428 if ((size % PORT_MMAP_CHUNK_SIZE) != 0 || nchunks == 0) { 429 nchunks++; --- 87 unchanged lines hidden (view full) --- 517 nxt_buf_t *b; 518 nxt_port_mmap_header_t *hdr; 519 520 hdr = nxt_port_get_port_incoming_mmap(task, spid, mmap_msg->mmap_id); 521 if (nxt_slow_path(hdr == NULL)) { 522 return NULL; 523 } 524 |
520 b = nxt_mp_zalloc(port->mem_pool, NXT_BUF_PORT_MMAP_SIZE); | 525 b = nxt_buf_mem_ts_alloc(task, port->mem_pool, 0); |
521 if (nxt_slow_path(b == NULL)) { 522 return NULL; 523 } 524 | 526 if (nxt_slow_path(b == NULL)) { 527 return NULL; 528 } 529 |
525 b->data = port->mem_pool; | |
526 b->completion_handler = nxt_port_mmap_buf_completion; | 530 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 | 531 532 nxt_buf_set_port_mmap(b); 533 534 nchunks = mmap_msg->size / PORT_MMAP_CHUNK_SIZE; 535 if ((mmap_msg->size % PORT_MMAP_CHUNK_SIZE) != 0) { 536 nchunks++; 537 } 538 --- 18 unchanged lines hidden (view full) --- 557 nxt_port_mmap_msg_t *mmap_msg; 558 nxt_port_mmap_header_t *hdr; 559 560 nxt_debug(task, "prepare %z bytes message for transfer to process %PI " 561 "via shared memory", sb->size, port->pid); 562 563 bsize = sb->niov * sizeof(nxt_port_mmap_msg_t); 564 |
562 b = nxt_buf_mem_alloc(port->mem_pool, bsize, 0); | 565 b = nxt_buf_mem_ts_alloc(task, port->mem_pool, bsize); |
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 --- | 566 if (nxt_slow_path(b == NULL)) { 567 return; 568 } 569 570 mmap_msg = (nxt_port_mmap_msg_t *) b->mem.start; 571 bmem = msg->buf; 572 573 for (i = 0; i < sb->niov; i++, mmap_msg++) { --- 135 unchanged lines hidden --- |