0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 8.2.2550: signal stack size is wrong with latest glibc 2.34

Problem:    Signal stack size is wrong with latest glibc 2.34.
Solution:   Use sysconf(_SC_SIGSTKSZ) if available. (Zdenek Dohnal, closes
            #7895)
This commit is contained in:
Bram Moolenaar
2021-02-25 17:17:56 +01:00
parent 1bd3cb2019
commit 0e62a6742b
5 changed files with 51 additions and 1 deletions

View File

@@ -783,7 +783,7 @@ mch_stackcheck(char *p)
* completely full.
*/
#ifndef SIGSTKSZ
#if !defined SIGSTKSZ && !defined(HAVE_SYSCONF_SIGSTKSZ)
# define SIGSTKSZ 8000 // just a guess of how much stack is needed...
#endif
@@ -806,13 +806,21 @@ init_signal_stack(void)
# else
sigstk.ss_sp = signal_stack;
# endif
# ifdef HAVE_SYSCONF_SIGSTKSZ
sigstk.ss_size = sysconf(_SC_SIGSTKSZ);
# else
sigstk.ss_size = SIGSTKSZ;
# endif
sigstk.ss_flags = 0;
(void)sigaltstack(&sigstk, NULL);
# else
sigstk.ss_sp = signal_stack;
if (stack_grows_downwards)
# ifdef HAVE_SYSCONF_SIGSTKSZ
sigstk.ss_sp += sysconf(_SC_SIGSTKSZ) - 1;
# else
sigstk.ss_sp += SIGSTKSZ - 1;
# endif
sigstk.ss_onstack = 0;
(void)sigstack(&sigstk, NULL);
# endif
@@ -3261,7 +3269,11 @@ mch_early_init(void)
* Ignore any errors.
*/
#if defined(HAVE_SIGALTSTACK) || defined(HAVE_SIGSTACK)
# ifdef HAVE_SYSCONF_SIGSTKSZ
signal_stack = alloc(sysconf(_SC_SIGSTKSZ));
# else
signal_stack = alloc(SIGSTKSZ);
# endif
init_signal_stack();
#endif
}