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