From: "mame (Yusuke Endoh)" Date: 2012-05-04T22:19:57+09:00 Subject: [ruby-dev:45618] [ruby-trunk - Bug #5423][Assigned] readlineの入力待機中に端末のウィンドウサイズ変更すると入力内容が乱れる Issue #5423 has been updated by mame (Yusuke Endoh). Status changed from Feedback to Assigned Assignee changed from kouji (Kouji Takao) to naruse (Yui NARUSE) #5023 もこれと同じ原因だと思います。再現します。 r24140 は #1118 で成瀬さんが FreeBSD のために入れたようですが、なんでこれで SEGV 回避になるのか説明がなくて よくわかりませんが、r24140 を revert すると問題の現象が消えるので regression だと思います。 ということで、成瀬さんお願いします。 -- Yusuke Endoh ---------------------------------------- Bug #5423: readlineの入力待機中に端末のウィンドウサイズ変更すると入力内容が乱れる https://bugs.ruby-lang.org/issues/5423#change-26447 Author: matsuu (Takuto Matsuu) Status: Assigned Priority: Normal Assignee: naruse (Yui NARUSE) Category: Target version: ruby -v: ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux] Readline.readline("> ")の入力待機中にターミナルのウィンドウサイズを変更すると、 入力内容がウィンドウサイズ変更に合わせて変化せず、画面が乱れます。 readlineがSIGWINCHに反応しないように設定されているのが原因のようです。 revision 24140で追加されたrl_catch_sigwinch = 0;が該当部分になります。 rl_catch_signals=0を設定した場合でも、SIGWINCHは反応すべき(rl_catch_sigwinch=1)だと思います。 Index: ChangeLog =================================================================== --- ChangeLog (revision 24139) +++ ChangeLog (revision 24140) @@ -1,3 +1,11 @@ +Thu Jul 16 12:42:10 2009 NARUSE, Yui + + * ext/readline/readline.c (readline_readline): rl_free_line_state + before rl_cleanup_after_signal. + + * ext/readline/readline.c (Init_readline): set rl_catch_signals and + rl_catch_signwinch as 0. [ruby-core:21884] + Thu Jul 16 08:59:22 2009 Koichi Sasada * node.h, vm_core.h, variable.c: rename global_entry to rb_global_entry. Index: ext/readline/readline.c =================================================================== --- ext/readline/readline.c (revision 24139) +++ ext/readline/readline.c (revision 24140) @@ -253,6 +253,7 @@ if (status) { #if defined HAVE_RL_CLEANUP_AFTER_SIGNAL /* restore terminal mode and signal handler*/ + rl_free_line_state(); rl_cleanup_after_signal(); #elif defined HAVE_RL_DEPREP_TERM_FUNCTION /* restore terminal mode */ @@ -1450,6 +1451,8 @@ #elif defined HAVE_RL_EVENT_HOOK rl_event_hook = readline_event; #endif + rl_catch_signals = 0; + rl_catch_sigwinch = 0; #ifdef HAVE_RL_CLEAR_SIGNALS rl_clear_signals(); #endif -- http://bugs.ruby-lang.org/