diff options
Diffstat (limited to '')
-rw-r--r-- | src/go/unit/nxt_go_port_memory.c | 5 | ||||
-rw-r--r-- | src/go/unit/nxt_go_process.c | 2 | ||||
-rw-r--r-- | src/nxt_port_memory.c | 7 | ||||
-rw-r--r-- | src/nxt_port_memory_int.h | 1 |
4 files changed, 13 insertions, 2 deletions
diff --git a/src/go/unit/nxt_go_port_memory.c b/src/go/unit/nxt_go_port_memory.c index c2a63a42..d2c0a0aa 100644 --- a/src/go/unit/nxt_go_port_memory.c +++ b/src/go/unit/nxt_go_port_memory.c @@ -106,6 +106,7 @@ nxt_go_new_port_mmap(nxt_go_process_t *process, nxt_port_id_t id) hdr->id = process->outgoing.nelts - 1; hdr->pid = process->pid; + hdr->sent_over = id; /* Mark first chunk as busy */ nxt_port_mmap_set_chunk_busy(hdr, 0); @@ -174,7 +175,9 @@ nxt_go_port_mmap_get(nxt_go_process_t *process, nxt_port_id_t port_id, while (port_mmap < end_port_mmap) { - if (nxt_port_mmap_get_free_chunk(port_mmap->hdr, c)) { + if ( (port_mmap->hdr->sent_over == 0xFFFFu || + port_mmap->hdr->sent_over == port_id) && + nxt_port_mmap_get_free_chunk(port_mmap->hdr, c)) { hdr = port_mmap->hdr; goto unlock_return; diff --git a/src/go/unit/nxt_go_process.c b/src/go/unit/nxt_go_process.c index c2b2c01c..736177ea 100644 --- a/src/go/unit/nxt_go_process.c +++ b/src/go/unit/nxt_go_process.c @@ -142,6 +142,8 @@ nxt_go_new_incoming_mmap(nxt_pid_t pid, nxt_fd_t fd) port_mmap->hdr->id, process->incoming.nelts - 1); } + port_mmap->hdr->sent_over = 0xFFFFu; + fail: nxt_go_mutex_unlock(&process->incoming_mutex); diff --git a/src/nxt_port_memory.c b/src/nxt_port_memory.c index 82d96004..ec4bbdf7 100644 --- a/src/nxt_port_memory.c +++ b/src/nxt_port_memory.c @@ -198,6 +198,8 @@ nxt_port_incoming_port_mmap(nxt_task_t *task, nxt_process_t *process, nxt_abort(); } + hdr->sent_over = 0xFFFFu; + fail: nxt_thread_mutex_unlock(&process->incoming_mutex); @@ -297,6 +299,7 @@ nxt_port_new_port_mmap(nxt_task_t *task, nxt_process_t *process, hdr->id = process->outgoing->nelts - 1; hdr->pid = process->pid; + hdr->sent_over = port->id; /* Mark first chunk as busy */ nxt_port_mmap_set_chunk_busy(hdr, 0); @@ -356,7 +359,9 @@ nxt_port_mmap_get(nxt_task_t *task, nxt_port_t *port, nxt_chunk_id_t *c, while (port_mmap < end_port_mmap) { - if (nxt_port_mmap_get_free_chunk(port_mmap->hdr, c)) { + if ( (port_mmap->hdr->sent_over == 0xFFFFu || + port_mmap->hdr->sent_over == port->id) && + nxt_port_mmap_get_free_chunk(port_mmap->hdr, c)) { hdr = port_mmap->hdr; goto unlock_return; diff --git a/src/nxt_port_memory_int.h b/src/nxt_port_memory_int.h index d82b6237..3c6c6ac6 100644 --- a/src/nxt_port_memory_int.h +++ b/src/nxt_port_memory_int.h @@ -49,6 +49,7 @@ typedef nxt_atomic_uint_t nxt_free_map_t; struct nxt_port_mmap_header_s { uint32_t id; nxt_pid_t pid; /* For sanity check. */ + nxt_port_id_t sent_over; nxt_free_map_t free_map[MAX_FREE_IDX]; }; |