diff options
author | Max Romanov <max.romanov@nginx.com> | 2021-11-08 23:04:38 +0300 |
---|---|---|
committer | Max Romanov <max.romanov@nginx.com> | 2021-11-08 23:04:38 +0300 |
commit | da0826e99f2c2144ea8e4b9a8b42f30ccf3203fa (patch) | |
tree | be2dd7f0f418ac2c723ba153ef4be917be52b939 | |
parent | 98c9763189728a17bef0a3ac1f421cb25678c018 (diff) | |
download | unit-da0826e99f2c2144ea8e4b9a8b42f30ccf3203fa.tar.gz unit-da0826e99f2c2144ea8e4b9a8b42f30ccf3203fa.tar.bz2 |
Go: fixing racing condition on app start.
Request procesing loop should be started in ready handler to avoid race
between go-routine start and context ready flag assignment.
The issue introduced in 43553aa72111.
-rw-r--r-- | go/nxt_cgo_lib.c | 1 | ||||
-rw-r--r-- | go/port.go | 13 |
2 files changed, 9 insertions, 5 deletions
diff --git a/go/nxt_cgo_lib.c b/go/nxt_cgo_lib.c index 330697c1..3e766b1e 100644 --- a/go/nxt_cgo_lib.c +++ b/go/nxt_cgo_lib.c @@ -30,6 +30,7 @@ nxt_cgo_run(uintptr_t handler) init.callbacks.port_send = nxt_cgo_port_send; init.callbacks.port_recv = nxt_cgo_port_recv; init.callbacks.shm_ack_handler = nxt_go_shm_ack_handler; + init.callbacks.ready_handler = nxt_go_ready; init.data = (void *) handler; @@ -110,11 +110,14 @@ func nxt_go_add_port(ctx *C.nxt_unit_ctx_t, p *C.nxt_unit_port_t) C.int { p.in_fd = -1 p.out_fd = -1 - if new_port.key.id == 65535 { - go func(ctx *C.nxt_unit_ctx_t) { - C.nxt_unit_run_shared(ctx); - }(ctx) - } + return C.NXT_UNIT_OK +} + +//export nxt_go_ready +func nxt_go_ready(ctx *C.nxt_unit_ctx_t) C.int { + go func(ctx *C.nxt_unit_ctx_t) { + C.nxt_unit_run_shared(ctx) + }(ctx) return C.NXT_UNIT_OK } |