]> granicus.if.org Git - vim/commitdiff
updated for version 7.2-130 v7.2.130
authorBram Moolenaar <Bram@vim.org>
Mon, 2 Mar 2009 01:47:02 +0000 (01:47 +0000)
committerBram Moolenaar <Bram@vim.org>
Mon, 2 Mar 2009 01:47:02 +0000 (01:47 +0000)
src/auto/configure
src/config.h.in
src/configure.in
src/globals.h
src/os_unix.c
src/version.c

index fba78afa89a83a4df2d057e6da24bda1ca7fb975..aea0013d4490458eb44a89207a19f440ef7a4a93 100755 (executable)
@@ -11565,6 +11565,67 @@ _ACEOF
 
 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
index d1fb8d1b545a0d5be6f1efe02631cd6b2d8d0c1a..900aef8d3aef914e0907507b56a8e714b73629fa 100644 (file)
@@ -50,6 +50,9 @@
 /* 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 <sys/types.h> doesn't define.  */
 #undef mode_t
 
index b6c77da98ae81ac1b33327738b5e7a98612dec72..ff1bd0c9ceeccda5b034e7526cd27538d4765c60 100644 (file)
@@ -2148,6 +2148,7 @@ fi
 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
index 2125f4a1dc4c133b85ee7c8547e8ed7cc3362a81..3236a1e91005b8b538f65d997ef82774ab05da22 100644 (file)
@@ -482,8 +482,10 @@ EXTERN char        *foreground_argument INIT(= NULL);
 /*
  * 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 int     hold_gui_events INIT(= 0);
+EXTERN volatile int hold_gui_events INIT(= 0);
 
 /*
  * When resizing the shell is postponed, remember the new size, and call
@@ -597,7 +599,8 @@ EXTERN int  exiting INIT(= FALSE);
 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);
+/* 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,10 +742,12 @@ EXTERN JMP_BUF x_jump_env;
  */
 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() */
+/* 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
-EXTERN int lc_active INIT(= FALSE); /* TRUE when lc_jump_env is valid. */
+/* 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,7 +991,8 @@ EXTERN int  curscript INIT(= 0);        /* index in scriptin[] */
 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
+/* 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 */
index 36872ad0d40629299eaf3aa8230da228f38a3e78..703b93231c0e0a08c6e125430e7bc020f9ddb26d 100644 (file)
@@ -181,7 +181,8 @@ static RETSIGTYPE catch_sigpwr __ARGS(SIGPROTOARG);
        && defined(FEAT_TITLE) && !defined(FEAT_GUI_GTK)
 # define SET_SIG_ALARM
 static RETSIGTYPE sig_alarm __ARGS(SIGPROTOARG);
-static int sig_alarm_called;
+/* volatile because it is used in signal handler sig_alarm(). */
+static volatile int sig_alarm_called;
 #endif
 static RETSIGTYPE deathtrap __ARGS(SIGPROTOARG);
 
@@ -201,13 +202,16 @@ static int save_patterns __ARGS((int num_pat, char_u **pat, int *num_file, char_
 # define SIG_ERR       ((RETSIGTYPE (*)())-1)
 #endif
 
-static int     do_resize = FALSE;
+/* 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
-static int     deadly_signal = 0;          /* The signal we caught */
-static int     in_mch_delay = FALSE;       /* sleeping in mch_delay() */
+/* 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,7 +806,7 @@ init_signal_stack()
 #endif
 
 /*
- * We need correct potatotypes for a signal function, otherwise mean compilers
+ * 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,13 +1072,18 @@ deathtrap SIGDEFARG(sigarg)
     SIGRETURN;
 }
 
-#ifdef _REENTRANT
+#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 int sigcont_received;
+static volatile int sigcont_received;
 static RETSIGTYPE sigcont_handler __ARGS(SIGPROTOARG);
 
 /*
@@ -1118,15 +1127,28 @@ mch_suspend()
     }
 # endif
 
-# ifdef _REENTRANT
+# if defined(_REENTRANT) && defined(SIGCONT)
     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();
+# 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,7 +1197,7 @@ set_signals()
 #ifdef SIGTSTP
     signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL);
 #endif
-#ifdef _REENTRANT
+#if defined(_REENTRANT) && defined(SIGCONT)
     signal(SIGCONT, sigcont_handler);
 #endif
 
@@ -1234,7 +1256,7 @@ catch_int_signal()
 reset_signals()
 {
     catch_signals(SIG_DFL, SIG_DFL);
-#ifdef _REENTRANT
+#if defined(_REENTRANT) && defined(SIGCONT)
     /* SIGCONT isn't in the list, because its default action is ignore */
     signal(SIGCONT, SIG_DFL);
 #endif
@@ -5899,7 +5921,9 @@ gpm_open()
             * 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)
index 8557480eb2db576c25463d580ab566f916536d62..b0022781877ebf1c9898dabf9c62174e137b3881 100644 (file)
@@ -676,6 +676,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    130,
 /**/
     129,
 /**/