diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-06-20 13:38:33 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-06-20 13:38:33 +0100 |
commit | 155f2d1451949d1124bfd6ba9c55be6bd74bab75 (patch) | |
tree | b62202254ef079aafcf30eaa01baf694d3f9b0a6 | |
parent | 73171ba4344e17484699d11c65d57fb1f4de572a (diff) |
patch 8.2.5141: using "volatile int" in a signal handler might be wrongv8.2.5141
Problem: Using "volatile int" in a signal handler might be wrong.
Solution: Use "volatile sig_atomic_t".
-rw-r--r-- | src/os_unix.c | 29 | ||||
-rw-r--r-- | src/os_win32.c | 8 | ||||
-rw-r--r-- | src/proto/os_unix.pro | 2 | ||||
-rw-r--r-- | src/proto/os_win32.pro | 2 | ||||
-rw-r--r-- | src/regexp.c | 4 | ||||
-rw-r--r-- | src/version.c | 2 |
6 files changed, 24 insertions, 23 deletions
diff --git a/src/os_unix.c b/src/os_unix.c index 947f46f856..260a847242 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -8251,9 +8251,9 @@ xsmp_close(void) /* * Implement timeout with timer_create() and timer_settime(). */ -static volatile int timeout_flag = FALSE; -static timer_t timer_id; -static int timer_created = FALSE; +static volatile sig_atomic_t timeout_flag = FALSE; +static timer_t timer_id; +static int timer_created = FALSE; /* * Callback for when the timer expires. @@ -8296,7 +8296,7 @@ stop_timeout(void) * This function is not expected to fail, but if it does it will still return a * valid flag pointer; the flag will remain stuck as FALSE . */ - volatile int * + volatile sig_atomic_t * start_timeout(long msec) { struct itimerspec interval = { @@ -8347,17 +8347,16 @@ delete_timer(void) } } -# else +# else // HAVE_TIMER_CREATE /* * Implement timeout with setitimer() */ -static struct itimerval prev_interval; -static struct sigaction prev_sigaction; -static volatile int timeout_flag = FALSE; -static int timer_active = FALSE; -static int timer_handler_active = FALSE; -static int alarm_pending = FALSE; +static struct sigaction prev_sigaction; +static volatile sig_atomic_t timeout_flag = FALSE; +static int timer_active = FALSE; +static int timer_handler_active = FALSE; +static volatile sig_atomic_t alarm_pending = FALSE; /* * Handle SIGALRM for a timeout. @@ -8383,7 +8382,7 @@ stop_timeout(void) if (timer_active) { timer_active = FALSE; - ret = setitimer(ITIMER_REAL, &disarm, &prev_interval); + ret = setitimer(ITIMER_REAL, &disarm, NULL); if (ret < 0) // Should only get here as a result of coding errors. semsg(_(e_could_not_clear_timeout_str), strerror(errno)); @@ -8398,7 +8397,7 @@ stop_timeout(void) semsg(_(e_could_not_reset_handler_for_timeout_str), strerror(errno)); } - timeout_flag = 0; + timeout_flag = FALSE; } /* @@ -8412,7 +8411,7 @@ stop_timeout(void) * This function is not expected to fail, but if it does it will still return a * valid flag pointer; the flag will remain stuck as FALSE . */ - volatile int * + volatile sig_atomic_t * start_timeout(long msec) { struct itimerval interval = { @@ -8461,7 +8460,7 @@ start_timeout(long msec) timer_handler_active = TRUE; // Set up the interval timer once the alarm handler is in place. - ret = setitimer(ITIMER_REAL, &interval, &prev_interval); + ret = setitimer(ITIMER_REAL, &interval, NULL); if (ret < 0) { // Should only get here as a result of coding errors. diff --git a/src/os_win32.c b/src/os_win32.c index f325935059..6af504693f 100644 --- a/src/os_win32.c +++ b/src/os_win32.c @@ -8334,9 +8334,9 @@ static int timer_active = FALSE; * deleted. Ping-ponging between the two flags prevents this causing 'fake' * timeouts. */ -static int timeout_flags[2]; -static int timeout_flag_idx = 0; -static int *timeout_flag = &timeout_flags[0]; +static sig_atomic_t timeout_flags[2]; +static int timeout_flag_idx = 0; +static sig_atomic_t *timeout_flag = &timeout_flags[0]; static void CALLBACK @@ -8378,7 +8378,7 @@ stop_timeout(void) * This function is not expected to fail, but if it does it still returns a * valid flag pointer; the flag will remain stuck at zero. */ - volatile int * + volatile sig_atomic_t * start_timeout(long msec) { BOOL ret; diff --git a/src/proto/os_unix.pro b/src/proto/os_unix.pro index a8e961b375..f30b78d26c 100644 --- a/src/proto/os_unix.pro +++ b/src/proto/os_unix.pro @@ -87,6 +87,6 @@ int xsmp_handle_requests(void); void xsmp_init(void); void xsmp_close(void); void stop_timeout(void); -volatile int *start_timeout(long msec); +volatile sig_atomic_t *start_timeout(long msec); void delete_timer(void); /* vim: set ft=c : */ diff --git a/src/proto/os_win32.pro b/src/proto/os_win32.pro index dd2c27e85e..66335601ed 100644 --- a/src/proto/os_win32.pro +++ b/src/proto/os_win32.pro @@ -85,5 +85,5 @@ int get_conpty_fix_type(void); void resize_console_buf(void); char *GetWin32Error(void); void stop_timeout(void); -volatile int *start_timeout(long msec); +volatile sig_atomic_t *start_timeout(long msec); /* vim: set ft=c : */ diff --git a/src/regexp.c b/src/regexp.c index 32661f6d8a..3c1334ddd9 100644 --- a/src/regexp.c +++ b/src/regexp.c @@ -21,8 +21,8 @@ #endif #ifdef FEAT_RELTIME -static int dummy_timeout_flag = 0; -static volatile int *timeout_flag = &dummy_timeout_flag; +static sig_atomic_t dummy_timeout_flag = 0; +static volatile sig_atomic_t *timeout_flag = &dummy_timeout_flag; #endif /* diff --git a/src/version.c b/src/version.c index 5b5b405fe2..99522846c6 100644 --- a/src/version.c +++ b/src/version.c @@ -735,6 +735,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 5141, +/**/ 5140, /**/ 5139, |