tarantool instance didn't close socket explicitly which could cause hot standby instance to fail to bind in case it tries to bind before socket is closed by OS. Now it is fixed by closing socket explicitly before wal_dir. Closes #3967 --- Branch: https://github.com/tarantool/tarantool/tree/i.kosarev/gh-3967-close-socket-explicitly Issue: https://github.com/tarantool/tarantool/issues/3967 src/box/box.cc | 1 + src/box/iproto.cc | 6 ++++++ src/box/iproto.h | 3 +++ 3 files changed, 10 insertions(+) diff --git a/src/box/box.cc b/src/box/box.cc index 41ba341ee..bf1d5720a 100644 --- a/src/box/box.cc +++ b/src/box/box.cc @@ -1661,6 +1661,7 @@ box_free(void) sequence_free(); gc_free(); engine_shutdown(); + iproto_socket_free(); wal_free(); } } diff --git a/src/box/iproto.cc b/src/box/iproto.cc index 19a945d2a..3bdb4f2c6 100644 --- a/src/box/iproto.cc +++ b/src/box/iproto.cc @@ -2075,3 +2075,9 @@ iproto_set_msg_max(int new_iproto_msg_max) iproto_do_cfg(&cfg_msg); cpipe_set_max_input(&net_pipe, new_iproto_msg_max / 2); } + +void +iproto_socket_free() +{ + evio_service_stop(&binary); +} \ No newline at end of file diff --git a/src/box/iproto.h b/src/box/iproto.h index b9a6cf8f7..6a9627705 100644 --- a/src/box/iproto.h +++ b/src/box/iproto.h @@ -80,6 +80,9 @@ iproto_listen(const char *uri); void iproto_set_msg_max(int iproto_msg_max); +void +iproto_socket_free(); + #endif /* defined(__cplusplus) */ #endif -- 2.17.1