diff --git a/src/box/box.cc b/src/box/box.cc index 6fc73fd4b6b70a84d5e4318d68b53976385b6372..34c22b4ef4b4526118d1ce9dd52c76420b16d90d 100644 --- a/src/box/box.cc +++ b/src/box/box.cc @@ -994,9 +994,6 @@ engine_init() static inline void box_init(void) { - error_init(); - - tuple_init(cfg_getd("slab_alloc_arena"), cfg_geti("slab_alloc_minimal"), cfg_geti("slab_alloc_maximal"), diff --git a/src/box/error.cc b/src/box/error.cc index 96822785e899130e434026775ea3adb2bcb30195..d7e2721a379941cae9a7a66346e74dc02690ca3b 100644 --- a/src/box/error.cc +++ b/src/box/error.cc @@ -156,7 +156,7 @@ ErrorInjection::ErrorInjection(const char *file, unsigned line, const char *msg) } void -error_init(void) +box_error_init(void) { error_factory->ClientError = BuildClientError; } diff --git a/src/box/error.h b/src/box/error.h index 82ac87211e3699b724101e8a02f7fc8b036e5d42..019b0d3d03c4a8d5982a5837d12c6a777791298a 100644 --- a/src/box/error.h +++ b/src/box/error.h @@ -182,7 +182,7 @@ class ErrorInjection: public LoggedError { }; void -error_init(void); +box_error_init(void); #endif /* defined(__cplusplus) */ diff --git a/src/main.cc b/src/main.cc index b6a9dbce62d7d8184f33283b3dd9089292e20695..d59caae35dd4eb62ae5f3dfb2475e9793a1e9ba5 100644 --- a/src/main.cc +++ b/src/main.cc @@ -61,6 +61,7 @@ #include "tt_pthread.h" #include "lua/init.h" #include "box/box.h" +#include "box/error.h" #include "scoped_guard.h" #include "random.h" #include "tt_uuid.h" @@ -624,6 +625,7 @@ main(int argc, char **argv) main_argv = argv; exception_init(); + box_error_init(); fiber_init(fiber_cxx_invoke); /* Init iobuf library with default readahead */ diff --git a/test/box-tap/net.box.result b/test/box-tap/net.box.result index 4eb7be3f9c89a8872753ce8dfe6dc90e7fa89d17..589113c3e8eb68592d2ca0390482975d0e5efe18 100644 --- a/test/box-tap/net.box.result +++ b/test/box-tap/net.box.result @@ -1,6 +1,7 @@ TAP version 13 -1..4 +1..5 ok - instance created ok - instance started ok - connected to instance ok - space exists +ok - error handling diff --git a/test/box-tap/net.box.test.lua b/test/box-tap/net.box.test.lua index 2bcafd40080fd452c05cc41ba29d1ad8a4a115ff..0c7fa3b121d897b382b5f1af7c22a1c02c9497f8 100755 --- a/test/box-tap/net.box.test.lua +++ b/test/box-tap/net.box.test.lua @@ -7,7 +7,7 @@ local net_box = require('net.box') local test_run = require('test_run') local inspector = test_run.new() -test:plan(4) +test:plan(5) -- create tarantool instance test:is( @@ -24,6 +24,8 @@ local uri = inspector:eval('second', 'box.cfg.listen')[1] local conn = net_box:new(uri) test:is(conn:is_connected(), true, 'connected to instance') test:is(conn.space ~= nil, true, 'space exists') +-- gh-1814: Segfault if using `net.box` before `box.cfg` start +test:ok(not pcall(function() conn.space._vspace:insert() end), "error handling") -- cleanup conn:close()