]> git.pld-linux.org Git - packages/vim.git/blame - 7.2.130
- new
[packages/vim.git] / 7.2.130
CommitLineData
478508cd
ER
1To: vim-dev@vim.org
2Subject: Patch 7.2.130
3Fcc: outbox
4From: Bram Moolenaar <Bram@moolenaar.net>
5Mime-Version: 1.0
6Content-Type: text/plain; charset=ISO-8859-1
7Content-Transfer-Encoding: 8bit
8------------
9
10Patch 7.2.130
11Problem: Vim may haing until CTRL-C is typed when using CTRL-Z.
12Solution: Avoid using pause(). Also use "volatile" for variables used in
13 signal functions. (Dominique Pelle)
14Files: src/auto/configure, src/configure.in, src/config.h.in,
15 src/globals.h, src/os_unix.c
16
17
18*** ../vim-7.2.129/src/auto/configure Thu Nov 20 10:36:04 2008
19--- src/auto/configure Mon Mar 2 02:36:52 2009
20***************
21*** 11565,11570 ****
22--- 11565,11631 ----
23
24 fi
25
26+ { $as_echo "$as_me:$LINENO: checking for working volatile" >&5
27+ $as_echo_n "checking for working volatile... " >&6; }
28+ if test "${ac_cv_c_volatile+set}" = set; then
29+ $as_echo_n "(cached) " >&6
30+ else
31+ cat >conftest.$ac_ext <<_ACEOF
32+ /* confdefs.h. */
33+ _ACEOF
34+ cat confdefs.h >>conftest.$ac_ext
35+ cat >>conftest.$ac_ext <<_ACEOF
36+ /* end confdefs.h. */
37+
38+ int
39+ main ()
40+ {
41+
42+ volatile int x;
43+ int * volatile y = (int *) 0;
44+ return !x && !y;
45+ ;
46+ return 0;
47+ }
48+ _ACEOF
49+ rm -f conftest.$ac_objext
50+ if { (ac_try="$ac_compile"
51+ case "(($ac_try" in
52+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
53+ *) ac_try_echo=$ac_try;;
54+ esac
55+ eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
56+ $as_echo "$ac_try_echo") >&5
57+ (eval "$ac_compile") 2>conftest.er1
58+ ac_status=$?
59+ grep -v '^ *+' conftest.er1 >conftest.err
60+ rm -f conftest.er1
61+ cat conftest.err >&5
62+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
63+ (exit $ac_status); } && {
64+ test -z "$ac_c_werror_flag" ||
65+ test ! -s conftest.err
66+ } && test -s conftest.$ac_objext; then
67+ ac_cv_c_volatile=yes
68+ else
69+ $as_echo "$as_me: failed program was:" >&5
70+ sed 's/^/| /' conftest.$ac_ext >&5
71+
72+ ac_cv_c_volatile=no
73+ fi
74+
75+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
76+ fi
77+ { $as_echo "$as_me:$LINENO: result: $ac_cv_c_volatile" >&5
78+ $as_echo "$ac_cv_c_volatile" >&6; }
79+ if test $ac_cv_c_volatile = no; then
80+
81+ cat >>confdefs.h <<\_ACEOF
82+ #define volatile /**/
83+ _ACEOF
84+
85+ fi
86+
87 { $as_echo "$as_me:$LINENO: checking for mode_t" >&5
88 $as_echo_n "checking for mode_t... " >&6; }
89 if test "${ac_cv_type_mode_t+set}" = set; then
90*** ../vim-7.2.129/src/configure.in Thu Nov 20 10:36:04 2008
91--- src/configure.in Sun Feb 22 21:47:44 2009
92***************
93*** 2148,2153 ****
94--- 2148,2154 ----
95 dnl Checks for typedefs, structures, and compiler characteristics.
96 AC_PROG_GCC_TRADITIONAL
97 AC_C_CONST
98+ AC_C_VOLATILE
99 AC_TYPE_MODE_T
100 AC_TYPE_OFF_T
101 AC_TYPE_PID_T
102*** ../vim-7.2.129/src/config.h.in Tue Jun 24 23:47:46 2008
103--- src/config.h.in Mon Feb 23 00:13:17 2009
104***************
105*** 50,55 ****
106--- 50,58 ----
107 /* Define to empty if the keyword does not work. */
108 #undef const
109
110+ /* Define to empty if the keyword does not work. */
111+ #undef volatile
112+
113 /* Define to `int' if <sys/types.h> doesn't define. */
114 #undef mode_t
115
116*** ../vim-7.2.129/src/globals.h Tue Jan 6 16:13:42 2009
117--- src/globals.h Mon Mar 2 02:40:16 2009
118***************
119*** 482,489 ****
120 /*
121 * While executing external commands or in Ex mode, should not insert GUI
122 * events in the input buffer: Set hold_gui_events to non-zero.
123 */
124! EXTERN int hold_gui_events INIT(= 0);
125
126 /*
127 * When resizing the shell is postponed, remember the new size, and call
128--- 482,491 ----
129 /*
130 * While executing external commands or in Ex mode, should not insert GUI
131 * events in the input buffer: Set hold_gui_events to non-zero.
132+ *
133+ * volatile because it is used in signal handler sig_sysmouse().
134 */
135! EXTERN volatile int hold_gui_events INIT(= 0);
136
137 /*
138 * When resizing the shell is postponed, remember the new size, and call
139***************
140*** 597,603 ****
141 EXTERN int really_exiting INIT(= FALSE);
142 /* TRUE when we are sure to exit, e.g., after
143 * a deadly signal */
144! EXTERN int full_screen INIT(= FALSE);
145 /* TRUE when doing full-screen output
146 * otherwise only writing some messages */
147
148--- 599,606 ----
149 EXTERN int really_exiting INIT(= FALSE);
150 /* TRUE when we are sure to exit, e.g., after
151 * a deadly signal */
152! /* volatile because it is used in signal handler deathtrap(). */
153! EXTERN volatile int full_screen INIT(= FALSE);
154 /* TRUE when doing full-screen output
155 * otherwise only writing some messages */
156
157***************
158*** 739,748 ****
159 */
160 EXTERN JMP_BUF lc_jump_env; /* argument to SETJMP() */
161 # ifdef SIGHASARG
162! EXTERN int lc_signal; /* catched signal number, 0 when no was signal
163! catched; used for mch_libcall() */
164 # endif
165! EXTERN int lc_active INIT(= FALSE); /* TRUE when lc_jump_env is valid. */
166 #endif
167
168 #if defined(FEAT_MBYTE) || defined(FEAT_POSTSCRIPT)
169--- 747,758 ----
170 */
171 EXTERN JMP_BUF lc_jump_env; /* argument to SETJMP() */
172 # ifdef SIGHASARG
173! /* volatile because it is used in signal handlers. */
174! EXTERN volatile int lc_signal; /* caught signal number, 0 when no was signal
175! caught; used for mch_libcall() */
176 # endif
177! /* volatile because it is used in signal handler deathtrap(). */
178! EXTERN volatile int lc_active INIT(= FALSE); /* TRUE when lc_jump_env is valid. */
179 #endif
180
181 #if defined(FEAT_MBYTE) || defined(FEAT_POSTSCRIPT)
182***************
183*** 986,992 ****
184 EXTERN FILE *scriptout INIT(= NULL); /* stream to write script to */
185 EXTERN int read_cmd_fd INIT(= 0); /* fd to read commands from */
186
187! EXTERN int got_int INIT(= FALSE); /* set to TRUE when interrupt
188 signal occurred */
189 #ifdef USE_TERM_CONSOLE
190 EXTERN int term_console INIT(= FALSE); /* set to TRUE when console used */
191--- 996,1003 ----
192 EXTERN FILE *scriptout INIT(= NULL); /* stream to write script to */
193 EXTERN int read_cmd_fd INIT(= 0); /* fd to read commands from */
194
195! /* volatile because it is used in signal handler catch_sigint(). */
196! EXTERN volatile int got_int INIT(= FALSE); /* set to TRUE when interrupt
197 signal occurred */
198 #ifdef USE_TERM_CONSOLE
199 EXTERN int term_console INIT(= FALSE); /* set to TRUE when console used */
200*** ../vim-7.2.129/src/os_unix.c Sun Feb 22 02:51:37 2009
201--- src/os_unix.c Mon Mar 2 01:05:50 2009
202***************
203*** 181,187 ****
204 && defined(FEAT_TITLE) && !defined(FEAT_GUI_GTK)
205 # define SET_SIG_ALARM
206 static RETSIGTYPE sig_alarm __ARGS(SIGPROTOARG);
207! static int sig_alarm_called;
208 #endif
209 static RETSIGTYPE deathtrap __ARGS(SIGPROTOARG);
210
211--- 181,188 ----
212 && defined(FEAT_TITLE) && !defined(FEAT_GUI_GTK)
213 # define SET_SIG_ALARM
214 static RETSIGTYPE sig_alarm __ARGS(SIGPROTOARG);
215! /* volatile because it is used in signal handler sig_alarm(). */
216! static volatile int sig_alarm_called;
217 #endif
218 static RETSIGTYPE deathtrap __ARGS(SIGPROTOARG);
219
220***************
221*** 201,213 ****
222 # define SIG_ERR ((RETSIGTYPE (*)())-1)
223 #endif
224
225! static int do_resize = FALSE;
226 #ifndef __EMX__
227 static char_u *extra_shell_arg = NULL;
228 static int show_shell_mess = TRUE;
229 #endif
230! static int deadly_signal = 0; /* The signal we caught */
231! static int in_mch_delay = FALSE; /* sleeping in mch_delay() */
232
233 static int curr_tmode = TMODE_COOK; /* contains current terminal mode */
234
235--- 202,217 ----
236 # define SIG_ERR ((RETSIGTYPE (*)())-1)
237 #endif
238
239! /* volatile because it is used in signal handler sig_winch(). */
240! static volatile int do_resize = FALSE;
241 #ifndef __EMX__
242 static char_u *extra_shell_arg = NULL;
243 static int show_shell_mess = TRUE;
244 #endif
245! /* volatile because it is used in signal handler deathtrap(). */
246! static volatile int deadly_signal = 0; /* The signal we caught */
247! /* volatile because it is used in signal handler deathtrap(). */
248! static volatile int in_mch_delay = FALSE; /* sleeping in mch_delay() */
249
250 static int curr_tmode = TMODE_COOK; /* contains current terminal mode */
251
252***************
253*** 802,808 ****
254 #endif
255
256 /*
257! * We need correct potatotypes for a signal function, otherwise mean compilers
258 * will barf when the second argument to signal() is ``wrong''.
259 * Let me try it with a few tricky defines from my own osdef.h (jw).
260 */
261--- 806,812 ----
262 #endif
263
264 /*
265! * We need correct prototypes for a signal function, otherwise mean compilers
266 * will barf when the second argument to signal() is ``wrong''.
267 * Let me try it with a few tricky defines from my own osdef.h (jw).
268 */
269***************
270*** 1068,1080 ****
271 SIGRETURN;
272 }
273
274! #ifdef _REENTRANT
275 /*
276 * On Solaris with multi-threading, suspending might not work immediately.
277 * Catch the SIGCONT signal, which will be used as an indication whether the
278 * suspending has been done or not.
279 */
280! static int sigcont_received;
281 static RETSIGTYPE sigcont_handler __ARGS(SIGPROTOARG);
282
283 /*
284--- 1072,1089 ----
285 SIGRETURN;
286 }
287
288! #if defined(_REENTRANT) && defined(SIGCONT)
289 /*
290 * On Solaris with multi-threading, suspending might not work immediately.
291 * Catch the SIGCONT signal, which will be used as an indication whether the
292 * suspending has been done or not.
293+ *
294+ * On Linux, signal is not always handled immediately either.
295+ * See https://bugs.launchpad.net/bugs/291373
296+ *
297+ * volatile because it is used in in signal handler sigcont_handler().
298 */
299! static volatile int sigcont_received;
300 static RETSIGTYPE sigcont_handler __ARGS(SIGPROTOARG);
301
302 /*
303***************
304*** 1118,1132 ****
305 }
306 # endif
307
308! # ifdef _REENTRANT
309 sigcont_received = FALSE;
310 # endif
311 kill(0, SIGTSTP); /* send ourselves a STOP signal */
312! # ifdef _REENTRANT
313! /* When we didn't suspend immediately in the kill(), do it now. Happens
314! * on multi-threaded Solaris. */
315! if (!sigcont_received)
316! pause();
317 # endif
318
319 # ifdef FEAT_TITLE
320--- 1127,1154 ----
321 }
322 # endif
323
324! # if defined(_REENTRANT) && defined(SIGCONT)
325 sigcont_received = FALSE;
326 # endif
327 kill(0, SIGTSTP); /* send ourselves a STOP signal */
328! # if defined(_REENTRANT) && defined(SIGCONT)
329! /*
330! * Wait for the SIGCONT signal to be handled. It generally happens
331! * immediately, but somehow not all the time. Do not call pause()
332! * because there would be race condition which would hang Vim if
333! * signal happened in between the test of sigcont_received and the
334! * call to pause(). If signal is not yet received, call sleep(0)
335! * to just yield CPU. Signal should then be received. If somehow
336! * it's still not received, sleep 1, 2, 3 ms. Don't bother waiting
337! * further if signal is not received after 1+2+3+4 ms (not expected
338! * to happen).
339! */
340! {
341! long wait;
342! for (wait = 0; !sigcont_received && wait <= 3L; wait++)
343! /* Loop is not entered most of the time */
344! mch_delay(wait, FALSE);
345! }
346 # endif
347
348 # ifdef FEAT_TITLE
349***************
350*** 1175,1181 ****
351 #ifdef SIGTSTP
352 signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL);
353 #endif
354! #ifdef _REENTRANT
355 signal(SIGCONT, sigcont_handler);
356 #endif
357
358--- 1197,1203 ----
359 #ifdef SIGTSTP
360 signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL);
361 #endif
362! #if defined(_REENTRANT) && defined(SIGCONT)
363 signal(SIGCONT, sigcont_handler);
364 #endif
365
366***************
367*** 1234,1240 ****
368 reset_signals()
369 {
370 catch_signals(SIG_DFL, SIG_DFL);
371! #ifdef _REENTRANT
372 /* SIGCONT isn't in the list, because its default action is ignore */
373 signal(SIGCONT, SIG_DFL);
374 #endif
375--- 1256,1262 ----
376 reset_signals()
377 {
378 catch_signals(SIG_DFL, SIG_DFL);
379! #if defined(_REENTRANT) && defined(SIGCONT)
380 /* SIGCONT isn't in the list, because its default action is ignore */
381 signal(SIGCONT, SIG_DFL);
382 #endif
383***************
384*** 5899,5905 ****
385--- 5921,5929 ----
386 * we are going to suspend or starting an external process
387 * so we shouldn't have problem with this
388 */
389+ # ifdef SIGTSTP
390 signal(SIGTSTP, restricted ? SIG_IGN : SIG_DFL);
391+ # endif
392 return 1; /* succeed */
393 }
394 if (gpm_fd == -2)
395*** ../vim-7.2.129/src/version.c Mon Mar 2 02:11:09 2009
396--- src/version.c Mon Mar 2 02:36:00 2009
397***************
398*** 678,679 ****
399--- 678,681 ----
400 { /* Add new patch number below this line */
401+ /**/
402+ 130,
403 /**/
404
405--
406hundred-and-one symptoms of being an internet addict:
407148. You find it easier to dial-up the National Weather Service
408 Weather/your_town/now.html than to simply look out the window.
409
410 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
411/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
412\\\ download, build and distribute -- http://www.A-A-P.org ///
413 \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
This page took 0.099224 seconds and 4 git commands to generate.