diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nxt_port.c | 10 | ||||
-rw-r--r-- | src/nxt_port_memory.c | 46 |
2 files changed, 38 insertions, 18 deletions
diff --git a/src/nxt_port.c b/src/nxt_port.c index fb4d65a6..e9553bd6 100644 --- a/src/nxt_port.c +++ b/src/nxt_port.c @@ -106,7 +106,7 @@ nxt_port_send_new_port(nxt_task_t *task, nxt_runtime_t *rt, nxt_debug(task, "send new port %FD to process %PI", new_port->socket.fd, process->pid); - b->data = port; + b->data = port->mem_pool; b->completion_handler = nxt_port_new_port_buf_completion; b->mem.free += sizeof(nxt_port_msg_new_port_t); msg = (nxt_port_msg_new_port_t *) b->mem.pos; @@ -128,15 +128,15 @@ nxt_port_send_new_port(nxt_task_t *task, nxt_runtime_t *rt, static void nxt_port_new_port_buf_completion(nxt_task_t *task, void *obj, void *data) { - nxt_buf_t *b; - nxt_port_t *port; + nxt_mp_t *mp; + nxt_buf_t *b; b = obj; - port = b->data; + mp = b->data; /* TODO: b->mem.pos */ - nxt_buf_free(port->mem_pool, b); + nxt_buf_free(mp, b); } diff --git a/src/nxt_port_memory.c b/src/nxt_port_memory.c index 50a6dd5a..2af03f67 100644 --- a/src/nxt_port_memory.c +++ b/src/nxt_port_memory.c @@ -90,7 +90,7 @@ nxt_port_mmap_destroy(nxt_port_mmap_t *port_mmap) } if (port_mmap->fd != -1) { - close(port_mmap->fd); + nxt_fd_close(port_mmap->fd); port_mmap->fd = -1; } } @@ -112,7 +112,15 @@ nxt_port_mmap_buf_completion(nxt_task_t *task, void *obj, void *data) mp = b->data; - port_mmap = (nxt_port_mmap_t *) b->parent; +#if (NXT_DEBUG) + if (nxt_slow_path(data != b->parent)) { + nxt_log_alert(task->log, "completion data (%p) != b->parent (%p)", + data, b->parent); + nxt_abort(); + } +#endif + + port_mmap = data; hdr = port_mmap->u.hdr; if (b->is_port_mmap_sent && b->mem.pos > b->mem.start) { @@ -240,19 +248,27 @@ static void nxt_port_mmap_send_fd_buf_completion(nxt_task_t *task, void *obj, void *data) { nxt_buf_t *b; - nxt_port_t *port; + nxt_mp_t *mp; nxt_port_mmap_t *port_mmap; b = obj; - port = b->data; - port_mmap = (nxt_port_mmap_t *) b->parent; + mp = b->data; + port_mmap = data; - nxt_debug(task, "mmap fd %FD sent to %PI", port_mmap->fd, port->pid); +#if (NXT_DEBUG) + if (nxt_slow_path(data != b->parent)) { + nxt_log_alert(task->log, "completion data (%p) != b->parent (%p)", + data, b->parent); + nxt_abort(); + } +#endif - close(port_mmap->fd); + nxt_debug(task, "mmap fd %FD has been sent", port_mmap->fd); + + nxt_fd_close(port_mmap->fd); port_mmap->fd = -1; - nxt_buf_free(port->mem_pool, b); + nxt_buf_free(mp, b); } @@ -337,6 +353,15 @@ nxt_port_new_port_mmap(nxt_task_t *task, nxt_process_t *process, goto remove_fail; } + b = nxt_buf_mem_alloc(port->mem_pool, 0, 0); + if (nxt_slow_path(b == NULL)) { + goto remove_fail; + } + + b->completion_handler = nxt_port_mmap_send_fd_buf_completion; + b->data = port->mem_pool; + b->parent = port_mmap; + /* Init segment header. */ hdr = port_mmap->u.hdr; @@ -348,11 +373,6 @@ nxt_port_new_port_mmap(nxt_task_t *task, nxt_process_t *process, nxt_debug(task, "send mmap fd %FD to process %PI", port_mmap->fd, port->pid); - b = nxt_buf_mem_alloc(port->mem_pool, 0, 0); - b->completion_handler = nxt_port_mmap_send_fd_buf_completion; - b->data = port; - b->parent = port_mmap; - /* TODO handle error */ (void) nxt_port_socket_write(task, port, NXT_PORT_MSG_MMAP, port_mmap->fd, 0, 0, b); |