From 051fbe550f825f36d06fdd6dfac16e801f4c6ce9 Mon Sep 17 00:00:00 2001 From: Karsten Hopp Date: Mar 04 2009 11:07:44 +0000 Subject: - patchlevel 130 --- diff --git a/7.2.130 b/7.2.130 new file mode 100644 index 0000000..8d65468 --- /dev/null +++ b/7.2.130 @@ -0,0 +1,413 @@ +To: vim-dev@vim.org +Subject: Patch 7.2.130 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.2.130 +Problem: Vim may haing until CTRL-C is typed when using CTRL-Z. +Solution: Avoid using pause(). Also use "volatile" for variables used in + signal functions. (Dominique Pelle) +Files: src/auto/configure, src/configure.in, src/config.h.in, + src/globals.h, src/os_unix.c + + +*** ../vim-7.2.129/src/auto/configure Thu Nov 20 10:36:04 2008 +--- src/auto/configure Mon Mar 2 02:36:52 2009 +*************** +*** 11565,11570 **** +--- 11565,11631 ---- + + fi + ++ { $as_echo "$as_me:$LINENO: checking for working volatile" >&5 ++ $as_echo_n "checking for working volatile... " >&6; } ++ if test "${ac_cv_c_volatile+set}" = set; then ++ $as_echo_n "(cached) " >&6 ++ else ++ cat >conftest.$ac_ext <<_ACEOF ++ /* confdefs.h. */ ++ _ACEOF ++ cat confdefs.h >>conftest.$ac_ext ++ cat >>conftest.$ac_ext <<_ACEOF ++ /* end confdefs.h. */ ++ ++ int ++ main () ++ { ++ ++ volatile int x; ++ int * volatile y = (int *) 0; ++ return !x && !y; ++ ; ++ return 0; ++ } ++ _ACEOF ++ rm -f conftest.$ac_objext ++ if { (ac_try="$ac_compile" ++ case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++ esac ++ eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" ++ $as_echo "$ac_try_echo") >&5 ++ (eval "$ac_compile") 2>conftest.er1 ++ ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 ++ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then ++ ac_cv_c_volatile=yes ++ else ++ $as_echo "$as_me: failed program was:" >&5 ++ sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ ac_cv_c_volatile=no ++ fi ++ ++ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ fi ++ { $as_echo "$as_me:$LINENO: result: $ac_cv_c_volatile" >&5 ++ $as_echo "$ac_cv_c_volatile" >&6; } ++ if test $ac_cv_c_volatile = no; then ++ ++ cat >>confdefs.h <<\_ACEOF ++ #define volatile /**/ ++ _ACEOF ++ ++ fi ++ + { $as_echo "$as_me:$LINENO: checking for mode_t" >&5 + $as_echo_n "checking for mode_t... " >&6; } + if test "${ac_cv_type_mode_t+set}" = set; then +*** ../vim-7.2.129/src/configure.in Thu Nov 20 10:36:04 2008 +--- src/configure.in Sun Feb 22 21:47:44 2009 +*************** +*** 2148,2153 **** +--- 2148,2154 ---- + dnl Checks for typedefs, structures, and compiler characteristics. + AC_PROG_GCC_TRADITIONAL + AC_C_CONST ++ AC_C_VOLATILE + AC_TYPE_MODE_T + AC_TYPE_OFF_T + AC_TYPE_PID_T +*** ../vim-7.2.129/src/config.h.in Tue Jun 24 23:47:46 2008 +--- src/config.h.in Mon Feb 23 00:13:17 2009 +*************** +*** 50,55 **** +--- 50,58 ---- + /* Define to empty if the keyword does not work. */ + #undef const + ++ /* Define to empty if the keyword does not work. */ ++ #undef volatile ++ + /* Define to `int' if doesn't define. */ + #undef mode_t + +*** ../vim-7.2.129/src/globals.h Tue Jan 6 16:13:42 2009 +--- src/globals.h Mon Mar 2 02:40:16 2009 +*************** +*** 482,489 **** + /* + * While executing external commands or in Ex mode, should not insert GUI + * events in the input buffer: Set hold_gui_events to non-zero. + */ +! EXTERN int hold_gui_events INIT(= 0); + + /* + * When resizing the shell is postponed, remember the new size, and call +--- 482,491 ---- + /* + * While executing external commands or in Ex mode, should not insert GUI + * events in the input buffer: Set hold_gui_events to non-zero. ++ * ++ * volatile because it is used in signal handler sig_sysmouse(). + */ +! EXTERN volatile int hold_gui_events INIT(= 0); + + /* + * When resizing the shell is postponed, remember the new size, and call +*************** +*** 597,603 **** + EXTERN int really_exiting INIT(= FALSE); + /* TRUE when we are sure to exit, e.g., after + * a deadly signal */ +! EXTERN int full_screen INIT(= FALSE); + /* TRUE when doing full-screen output + * otherwise only writing some messages */ + +--- 599,606 ---- + EXTERN int really_exiting INIT(= FALSE); + /* TRUE when we are sure to exit, e.g., after + * a deadly signal */ +! /* volatile because it is used in signal handler deathtrap(). */ +! EXTERN volatile int full_screen INIT(= FALSE); + /* TRUE when doing full-screen output + * otherwise only writing some messages */ + +*************** +*** 739,748 **** + */ + EXTERN JMP_BUF lc_jump_env; /* argument to SETJMP() */ + # ifdef SIGHASARG +! EXTERN int lc_signal; /* catched signal number, 0 when no was signal +! catched; used for mch_libcall() */ + # endif +! EXTERN int lc_active INIT(= FALSE); /* TRUE when lc_jump_env is valid. */ + #endif + + #if defined(FEAT_MBYTE) || defined(FEAT_POSTSCRIPT) +--- 747,758 ---- + */ + EXTERN JMP_BUF lc_jump_env; /* argument to SETJMP() */ + # ifdef SIGHASARG +! /* volatile because it is used in signal handlers. */ +! EXTERN volatile int lc_signal; /* caught signal number, 0 when no was signal +! caught; used for mch_libcall() */ + # endif +! /* volatile because it is used in signal handler deathtrap(). */ +! EXTERN volatile int lc_active INIT(= FALSE); /* TRUE when lc_jump_env is valid. */ + #endif + + #if defined(FEAT_MBYTE) || defined(FEAT_POSTSCRIPT) +*************** +*** 986,992 **** + EXTERN FILE *scriptout INIT(= NULL); /* stream to write script to */ + EXTERN int read_cmd_fd INIT(= 0); /* fd to read commands from */ + +! EXTERN int got_int INIT(= FALSE); /* set to TRUE when interrupt + signal occurred */ + #ifdef USE_TERM_CONSOLE + EXTERN int term_console INIT(= FALSE); /* set to TRUE when console used */ +--- 996,1003 ---- + EXTERN FILE *scriptout INIT(= NULL); /* stream to write script to */ + EXTERN int read_cmd_fd INIT(= 0); /* fd to read commands from */ + +! /* volatile because it is used in signal handler catch_sigint(). */ +! EXTERN volatile int got_int INIT(= FALSE); /* set to TRUE when interrupt + signal occurred */ + #ifdef USE_TERM_CONSOLE + EXTERN int term_console INIT(= FALSE); /* set to TRUE when console used */ +*** ../vim-7.2.129/src/os_unix.c Sun Feb 22 02:51:37 2009 +--- src/os_unix.c Mon Mar 2 01:05:50 2009 +*************** +*** 181,187 **** + && defined(FEAT_TITLE) && !defined(FEAT_GUI_GTK) + # define SET_SIG_ALARM + static RETSIGTYPE sig_alarm __ARGS(SIGPROTOARG); +! static int sig_alarm_called; + #endif + static RETSIGTYPE deathtrap __ARGS(SIGPROTOARG); + +--- 181,188 ---- + && defined(FEAT_TITLE) && !defined(FEAT_GUI_GTK) + # define SET_SIG_ALARM + static RETSIGTYPE sig_alarm __ARGS(SIGPROTOARG); +! /* volatile because it is used in signal handler sig_alarm(). */ +! static volatile int sig_alarm_called; + #endif + static RETSIGTYPE deathtrap __ARGS(SIGPROTOARG); + +*************** +*** 201,213 **** + # define SIG_ERR ((RETSIGTYPE (*)())-1) + #endif + +! static int do_resize = FALSE; + #ifndef __EMX__ + static char_u *extra_shell_arg = NULL; + static int show_shell_mess = TRUE; + #endif +! static int deadly_signal = 0; /* The signal we caught */ +! static int in_mch_delay = FALSE; /* sleeping in mch_delay() */ + + static int curr_tmode = TMODE_COOK; /* contains current terminal mode */ + +--- 202,217 ---- + # define SIG_ERR ((RETSIGTYPE (*)())-1) + #endif + +! /* volatile because it is used in signal handler sig_winch(). */ +! static volatile int do_resize = FALSE; + #ifndef __EMX__ + static char_u *extra_shell_arg = NULL; + static int show_shell_mess = TRUE; + #endif +! /* volatile because it is used in signal handler deathtrap(). */ +! static volatile int deadly_signal = 0; /* The signal we caught */ +! /* volatile because it is used in signal handler deathtrap(). */ +! static volatile int in_mch_delay = FALSE; /* sleeping in mch_delay() */ + + static int curr_tmode = TMODE_COOK; /* contains current terminal mode */ + +*************** +*** 802,808 **** + #endif + + /* +! * We need correct potatotypes for a signal function, otherwise mean compilers + * will barf when the second argument to signal() is ``wrong''. + * Let me try it with a few tricky defines from my own osdef.h (jw). + */ +--- 806,812 ---- + #endif + + /* +! * We need correct prototypes for a signal function, otherwise mean compilers + * will barf when the second argument to signal() is ``wrong''. + * Let me try it with a few tricky defines from my own osdef.h (jw). + */ +*************** +*** 1068,1080 **** + SIGRETURN; + } + +! #ifdef _REENTRANT + /* + * On Solaris with multi-threading, suspending might not work immediately. + * Catch the SIGCONT signal, which will be used as an indication whether the + * suspending has been done or not. + */ +! static int sigcont_received; + static RETSIGTYPE sigcont_handler __ARGS(SIGPROTOARG); + + /* +--- 1072,1089 ---- + SIGRETURN; + } + +! #if defined(_REENTRANT) && defined(SIGCONT) + /* + * On Solaris with multi-threading, suspending might not work immediately. + * Catch the SIGCONT signal, which will be used as an indication whether the + * suspending has been done or not. ++ * ++ * On Linux, signal is not always handled immediately either. ++ * See https://bugs.launchpad.net/bugs/291373 ++ * ++ * volatile because it is used in in signal handler sigcont_handler(). + */ +! static volatile int sigcont_received; + static RETSIGTYPE sigcont_handler __ARGS(SIGPROTOARG); + + /* +*************** +*** 1118,1132 **** + } + # endif + +! # ifdef _REENTRANT + sigcont_received = FALSE; + # endif + kill(0, SIGTSTP); /* send ourselves a STOP signal */ +! # ifdef _REENTRANT +! /* When we didn't suspend immediately in the kill(), do it now. Happens +! * on multi-threaded Solaris. */ +! if (!sigcont_received) +! pause(); + # endif + + # ifdef FEAT_TITLE +--- 1127,1154 ---- + } + # endif + +! # if defined(_REENTRANT) && defined(SIGCONT) + sigcont_received = FALSE; + # endif + kill(0, SIGTSTP); /* send ourselves a STOP signal */ +! # if defined(_REENTRANT) && defined(SIGCONT) +! /* +! * Wait for the SIGCONT signal to be handled. It generally happens +! * immediately, but somehow not all the time. Do not call pause() +! * because there would be race condition which would hang Vim if +! * signal happened in between the test of sigcont_received and the +! * call to pause(). If signal is not yet received, call sleep(0) +! * to just yield CPU. Signal should then be received. If somehow +! * it's still not received, sleep 1, 2, 3 ms. Don't bother waiting +! * further if signal is not received after 1+2+3+4 ms (not expected +! * to happen). +! */ +! { +! long wait; +! for (wait = 0; !sigcont_received && wait <= 3L; wait++) +! /* Loop is not entered most of the time */ +! mch_delay(wait, FALSE); +! } + # endif + + # ifdef FEAT_TITLE +*************** +*** 1175,1181 **** + #ifdef SIGTSTP + signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL); + #endif +! #ifdef _REENTRANT + signal(SIGCONT, sigcont_handler); + #endif + +--- 1197,1203 ---- + #ifdef SIGTSTP + signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL); + #endif +! #if defined(_REENTRANT) && defined(SIGCONT) + signal(SIGCONT, sigcont_handler); + #endif + +*************** +*** 1234,1240 **** + reset_signals() + { + catch_signals(SIG_DFL, SIG_DFL); +! #ifdef _REENTRANT + /* SIGCONT isn't in the list, because its default action is ignore */ + signal(SIGCONT, SIG_DFL); + #endif +--- 1256,1262 ---- + reset_signals() + { + catch_signals(SIG_DFL, SIG_DFL); +! #if defined(_REENTRANT) && defined(SIGCONT) + /* SIGCONT isn't in the list, because its default action is ignore */ + signal(SIGCONT, SIG_DFL); + #endif +*************** +*** 5899,5905 **** +--- 5921,5929 ---- + * we are going to suspend or starting an external process + * so we shouldn't have problem with this + */ ++ # ifdef SIGTSTP + signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL); ++ # endif + return 1; /* succeed */ + } + if (gpm_fd == -2) +*** ../vim-7.2.129/src/version.c Mon Mar 2 02:11:09 2009 +--- src/version.c Mon Mar 2 02:36:00 2009 +*************** +*** 678,679 **** +--- 678,681 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 130, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +148. You find it easier to dial-up the National Weather Service + Weather/your_town/now.html than to simply look out the window. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org ///