[Tarantool-patches] [PATCH] clear terminal state on panic

Serge Petrenko sergepetrenko at tarantool.org
Fri Nov 29 14:06:56 MSK 2019


Hi! Thanks for your replies!

Fixed:

diff --git a/src/main.cc b/src/main.cc
index 014958a17..a1572b81e 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -589,7 +589,7 @@ load_cfg()
 }
 
 void
-free_rl_state(void)
+tarantool_atexit(void)
 {
        /* Same checks as in tarantool_free() */
        if (getpid() != master_pid)
@@ -848,7 +848,14 @@ main(int argc, char **argv)
                trigger_create(&break_loop_trigger, break_loop, NULL, NULL);
                trigger_add(&box_on_shutdown, &break_loop_trigger);
 
-               atexit(free_rl_state);
+               /*
+                * The call to tarantool_free() below, thanks to
+                * on_shutdown triggers, works all the time
+                * except when we panic. So leave the ever-
+                * necessary cleanups in atexit handler, which
+                * is executed always.
+                */
+               atexit(tarantool_atexit);
 
                if (!loop())
                        panic("%s", "can't init event loop");

--
Serge Petrenko
sergepetrenko at tarantool.org




> 28 нояб. 2019 г., в 1:31, Cyrill Gorcunov <gorcunov at gmail.com> написал(а):
> 
> On Thu, Nov 28, 2019 at 12:51:47AM +0300, Konstantin Osipov wrote:
>>> 
>>> Should not we rather provide some tarantool_atexit() helper
>>> from where we would call other cleanup and etc routines?
>>> We already have tarantool_atfork() hook. Not a big deal
>>> but while the code in question is being modified anyway.
>> 
>> Why not, still the exit procedure is complicated because of
>> on_shutdown triggers, so it's important that if there are changes
>> to it, they are documented in the code, not in cs comments.
> 
> Yes, putting comment into the code why we're to restore the
> terminal settings on panic is quite important.



More information about the Tarantool-patches mailing list