From: Serge Petrenko <sergepetrenko@tarantool.org>
To: alexander.turenko@tarantool.org
Cc: tarantool-patches@dev.tarantool.org
Subject: [Tarantool-patches] [PATCH] clear terminal state on panic
Date: Tue, 26 Nov 2019 18:15:58 +0300 [thread overview]
Message-ID: <20191126151557.25754-1-sergepetrenko@tarantool.org> (raw)
The tarantool_free() call in the end of main() works all the time except
when we exit due to a panic. We need to clear terminal state in this
case also, so return to using atexit() to clear readline state.
Closes #4466
---
https://github.com/tarantool/tarantool/issues/4466
https://github.com/tarantool/tarantool/tree/sp/gh-4466-clear-rl-state
src/main.cc | 34 ++++++++++++++++++++++++----------
1 file changed, 24 insertions(+), 10 deletions(-)
diff --git a/src/main.cc b/src/main.cc
index 0ff2213b6..014958a17 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -588,6 +588,28 @@ load_cfg()
box_cfg();
}
+void
+free_rl_state(void)
+{
+ /* Same checks as in tarantool_free() */
+ if (getpid() != master_pid)
+ return;
+
+ if (!cord_is_main())
+ return;
+
+ /* tarantool_lua_free() was formerly reponsible for terminal reset,
+ * but it is no longer called
+ */
+ if (isatty(STDIN_FILENO)) {
+ /*
+ * Restore terminal state. Doesn't hurt if exiting not
+ * due to a signal.
+ */
+ rl_cleanup_after_signal();
+ }
+}
+
void
tarantool_free(void)
{
@@ -622,16 +644,6 @@ tarantool_free(void)
#ifdef ENABLE_GCOV
__gcov_flush();
#endif
- /* tarantool_lua_free() was formerly reponsible for terminal reset,
- * but it is no longer called
- */
- if (isatty(STDIN_FILENO)) {
- /*
- * Restore terminal state. Doesn't hurt if exiting not
- * due to a signal.
- */
- rl_cleanup_after_signal();
- }
cbus_free();
#if 0
/*
@@ -836,6 +848,8 @@ 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);
+
if (!loop())
panic("%s", "can't init event loop");
--
2.21.0 (Apple Git-122)
next reply other threads:[~2019-11-26 15:16 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-26 15:15 Serge Petrenko [this message]
2019-11-26 20:56 ` Konstantin Osipov
2019-11-27 16:07 ` Cyrill Gorcunov
2019-11-27 21:51 ` Konstantin Osipov
2019-11-27 22:31 ` Cyrill Gorcunov
2019-11-29 11:06 ` Serge Petrenko
2019-11-29 11:15 ` Cyrill Gorcunov
2019-11-29 12:20 ` Serge Petrenko
2019-11-29 13:00 ` Cyrill Gorcunov
2019-11-29 14:53 ` Konstantin Osipov
2019-12-10 14:03 ` Kirill Yukhin
2019-12-23 14:29 ` Alexander Turenko
2020-01-13 11:14 ` Alexander Turenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191126151557.25754-1-sergepetrenko@tarantool.org \
--to=sergepetrenko@tarantool.org \
--cc=alexander.turenko@tarantool.org \
--cc=tarantool-patches@dev.tarantool.org \
--subject='Re: [Tarantool-patches] [PATCH] clear terminal state on panic' \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox