Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
c5757662
Commit
c5757662
authored
Apr 03, 2012
by
Premysl Hruby
Browse files
allocate alternate signal stack, change of sigaction flags for sigterm
parent
84e5684b
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/redis.c
View file @
c5757662
...
...
@@ -61,6 +61,9 @@ double R_Zero, R_PosInf, R_NegInf, R_Nan;
/*================================= Globals ================================= */
/* Alternate stack for SIGSEGV/etc handlers */
char
altstack
[
SIGSTKSZ
];
/* Global vars */
struct
redisServer
server
;
/* server global state */
struct
redisCommand
*
commandTable
;
...
...
@@ -2319,15 +2322,24 @@ static void sigtermHandler(int sig) {
void
setupSignalHandlers
(
void
)
{
struct
sigaction
act
;
stack_t
stack
;
stack
.
ss_sp
=
altstack
;
stack
.
ss_flags
=
0
;
stack
.
ss_size
=
SIGSTKSZ
;
sigaltstack
(
&
stack
,
NULL
);
/* When the SA_SIGINFO flag is set in sa_flags then sa_sigaction is used.
* Otherwise, sa_handler is used. */
sigemptyset
(
&
act
.
sa_mask
);
act
.
sa_flags
=
SA_NODEFER
|
SA_ONSTACK
|
SA_RESETHAND
;
act
.
sa_flags
=
0
;
act
.
sa_handler
=
sigtermHandler
;
sigaction
(
SIGTERM
,
&
act
,
NULL
);
#ifdef HAVE_BACKTRACE
/* Use alternate stack so we don't clobber stack in case of segv, or when we run out of stack ..
* also resethand & nodefer so we can get interrupted (and killed) if we cause SEGV during SEGV handler */
sigemptyset
(
&
act
.
sa_mask
);
act
.
sa_flags
=
SA_NODEFER
|
SA_ONSTACK
|
SA_RESETHAND
|
SA_SIGINFO
;
act
.
sa_sigaction
=
sigsegvHandler
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment