From 63af8c53ef3422bd1cc1fb44d9bb2838a3bb897d Mon Sep 17 00:00:00 2001 From: Roman Tsisyk <roman@tsisyk.com> Date: Thu, 6 Oct 2016 15:00:20 +0300 Subject: [PATCH] Initialize ClientError in main() instead of box_init() diag_set(ClientError, ...) is needed for net.box and box.error() which should work without box.cfg{} Fixes #1814 --- src/box/box.cc | 3 --- src/box/error.cc | 2 +- src/box/error.h | 2 +- src/main.cc | 2 ++ test/box-tap/net.box.result | 3 ++- test/box-tap/net.box.test.lua | 4 +++- 6 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/box/box.cc b/src/box/box.cc index 6fc73fd4b6..34c22b4ef4 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 96822785e8..d7e2721a37 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 82ac87211e..019b0d3d03 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 b6a9dbce62..d59caae35d 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 4eb7be3f9c..589113c3e8 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 2bcafd4008..0c7fa3b121 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() -- GitLab