Tarantool development patches archive
 help / color / mirror / Atom feed
* [Tarantool-patches] [PATCH] clear terminal state on panic
@ 2019-11-26 15:15 Serge Petrenko
  2019-11-26 20:56 ` Konstantin Osipov
  2019-12-10 14:03 ` Kirill Yukhin
  0 siblings, 2 replies; 13+ messages in thread
From: Serge Petrenko @ 2019-11-26 15:15 UTC (permalink / raw)
  To: alexander.turenko; +Cc: tarantool-patches

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)

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2020-01-13 11:14 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-26 15:15 [Tarantool-patches] [PATCH] clear terminal state on panic Serge Petrenko
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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox