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.
This commit is contained in:
Max Romanov
2021-11-08 23:04:38 +03:00
parent 98c9763189
commit da0826e99f
2 changed files with 9 additions and 5 deletions

View File

@@ -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;

View File

@@ -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 {
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);
C.nxt_unit_run_shared(ctx)
}(ctx)
}
return C.NXT_UNIT_OK
}