Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
varnish-cache
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
varnishcache
varnish-cache
Commits
293edb1e
Commit
293edb1e
authored
Oct 21, 2017
by
Poul-Henning Kamp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move the worker process stack magic to child_main.c where it belongs.
parent
82ae65f8
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
83 additions
and
74 deletions
+83
-74
cache_main.c
bin/varnishd/cache/cache_main.c
+76
-2
heritage.h
bin/varnishd/common/heritage.h
+1
-1
mgt_child.c
bin/varnishd/mgt/mgt_child.c
+6
-71
No files found.
bin/varnishd/cache/cache_main.c
View file @
293edb1e
...
@@ -33,6 +33,9 @@
...
@@ -33,6 +33,9 @@
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#ifdef HAVE_SIGALTSTACK
# include <sys/mman.h>
#endif
#ifdef HAVE_PTHREAD_NP_H
#ifdef HAVE_PTHREAD_NP_H
# include <pthread_np.h>
# include <pthread_np.h>
...
@@ -121,7 +124,7 @@ THR_GetName(void)
...
@@ -121,7 +124,7 @@ THR_GetName(void)
*/
*/
#ifdef HAVE_SIGALTSTACK
#ifdef HAVE_SIGALTSTACK
#include <signal.h>
#include <signal.h>
extern
stack_t
altstack
;
static
stack_t
altstack
;
#endif
#endif
void
void
...
@@ -222,10 +225,81 @@ child_malloc_fail(void *p, const char *s)
...
@@ -222,10 +225,81 @@ child_malloc_fail(void *p, const char *s)
}
}
#endif
#endif
/*=====================================================================
* signal handler for child process
*/
static
void
__match_proto__
()
child_signal_handler
(
int
s
,
siginfo_t
*
si
,
void
*
c
)
{
char
buf
[
1024
];
struct
sigaction
sa
;
(
void
)
c
;
/* Don't come back */
memset
(
&
sa
,
0
,
sizeof
sa
);
sa
.
sa_handler
=
SIG_DFL
;
(
void
)
sigaction
(
SIGSEGV
,
&
sa
,
NULL
);
(
void
)
sigaction
(
SIGABRT
,
&
sa
,
NULL
);
bprintf
(
buf
,
"Signal %d (%s) received at %p si_code %d"
,
s
,
strsignal
(
s
),
si
->
si_addr
,
si
->
si_code
);
VAS_Fail
(
__func__
,
__FILE__
,
__LINE__
,
buf
,
VAS_WRONG
);
}
/*=====================================================================
* Magic for panicing properly on signals
*/
static
void
child_sigmagic
(
size_t
altstksz
)
{
struct
sigaction
sa
;
memset
(
&
sa
,
0
,
sizeof
sa
);
#ifdef HAVE_SIGALTSTACK
size_t
sz
=
SIGSTKSZ
+
4096
;
if
(
sz
<
altstksz
)
sz
=
altstksz
;
altstack
.
ss_sp
=
mmap
(
NULL
,
sz
,
PROT_READ
|
PROT_WRITE
,
MAP_PRIVATE
|
MAP_ANONYMOUS
,
-
1
,
0
);
AN
(
altstack
.
ss_sp
!=
MAP_FAILED
);
AN
(
altstack
.
ss_sp
);
altstack
.
ss_size
=
sz
;
altstack
.
ss_flags
=
0
;
sa
.
sa_flags
|=
SA_ONSTACK
;
#endif
THR_Init
();
sa
.
sa_sigaction
=
child_signal_handler
;
sa
.
sa_flags
|=
SA_SIGINFO
;
(
void
)
sigaction
(
SIGBUS
,
&
sa
,
NULL
);
(
void
)
sigaction
(
SIGABRT
,
&
sa
,
NULL
);
(
void
)
sigaction
(
SIGSEGV
,
&
sa
,
NULL
);
}
/*=====================================================================
* Run the child process
*/
void
void
child_main
(
void
)
child_main
(
int
sigmagic
,
size_t
altstksz
)
{
{
if
(
sigmagic
)
child_sigmagic
(
altstksz
);
(
void
)
signal
(
SIGINT
,
SIG_DFL
);
(
void
)
signal
(
SIGTERM
,
SIG_DFL
);
setbuf
(
stdout
,
NULL
);
setbuf
(
stdout
,
NULL
);
setbuf
(
stderr
,
NULL
);
setbuf
(
stderr
,
NULL
);
printf
(
"Child starts
\n
"
);
printf
(
"Child starts
\n
"
);
...
...
bin/varnishd/common/heritage.h
View file @
293edb1e
...
@@ -109,7 +109,7 @@ void MCH_Fd_Inherit(int fd, const char *what);
...
@@ -109,7 +109,7 @@ void MCH_Fd_Inherit(int fd, const char *what);
} while (0)
} while (0)
/* cache/cache_main.c */
/* cache/cache_main.c */
void
child_main
(
void
);
void
child_main
(
int
,
size_t
);
/* cache/cache_vcl.c */
/* cache/cache_vcl.c */
int
VCL_TestLoad
(
const
char
*
);
int
VCL_TestLoad
(
const
char
*
);
...
...
bin/varnishd/mgt/mgt_child.c
View file @
293edb1e
...
@@ -85,11 +85,6 @@ static struct vlu *child_std_vlu;
...
@@ -85,11 +85,6 @@ static struct vlu *child_std_vlu;
static
struct
vsb
*
child_panic
=
NULL
;
static
struct
vsb
*
child_panic
=
NULL
;
#ifdef HAVE_SIGALTSTACK
#include <sys/mman.h>
stack_t
altstack
;
#endif
static
void
mgt_reap_child
(
void
);
static
void
mgt_reap_child
(
void
);
/*=====================================================================
/*=====================================================================
...
@@ -261,66 +256,6 @@ child_poker(const struct vev *e, int what)
...
@@ -261,66 +256,6 @@ child_poker(const struct vev *e, int what)
return
0
;
return
0
;
}
}
/*=====================================================================
* signal handler for child process
*/
static
void
__match_proto__
()
child_signal_handler
(
int
s
,
siginfo_t
*
si
,
void
*
c
)
{
char
buf
[
1024
];
struct
sigaction
sa
;
(
void
)
c
;
/* Don't come back */
memset
(
&
sa
,
0
,
sizeof
sa
);
sa
.
sa_handler
=
SIG_DFL
;
(
void
)
sigaction
(
SIGSEGV
,
&
sa
,
NULL
);
(
void
)
sigaction
(
SIGABRT
,
&
sa
,
NULL
);
bprintf
(
buf
,
"Signal %d (%s) received at %p si_code %d"
,
s
,
strsignal
(
s
),
si
->
si_addr
,
si
->
si_code
);
VAS_Fail
(
__func__
,
__FILE__
,
__LINE__
,
buf
,
VAS_WRONG
);
}
/*=====================================================================
* Launch the child process
*/
static
void
mgt_child_sigmagic
(
void
)
{
struct
sigaction
sa
;
memset
(
&
sa
,
0
,
sizeof
sa
);
sa
.
sa_sigaction
=
child_signal_handler
;
sa
.
sa_flags
=
SA_SIGINFO
;
(
void
)
sigaction
(
SIGBUS
,
&
sa
,
NULL
);
(
void
)
sigaction
(
SIGABRT
,
&
sa
,
NULL
);
#ifdef HAVE_SIGALTSTACK
size_t
sz
=
SIGSTKSZ
+
4096
;
if
(
sz
<
mgt_param
.
wthread_stacksize
)
sz
=
mgt_param
.
wthread_stacksize
;
altstack
.
ss_sp
=
mmap
(
NULL
,
sz
,
PROT_READ
|
PROT_WRITE
,
MAP_PRIVATE
|
MAP_ANONYMOUS
,
-
1
,
0
);
AN
(
altstack
.
ss_sp
!=
MAP_FAILED
);
AN
(
altstack
.
ss_sp
);
altstack
.
ss_size
=
sz
;
altstack
.
ss_flags
=
0
;
AZ
(
sigaltstack
(
&
altstack
,
NULL
));
sa
.
sa_flags
|=
SA_ONSTACK
;
#endif
(
void
)
sigaction
(
SIGSEGV
,
&
sa
,
NULL
);
}
/*=====================================================================
/*=====================================================================
* Launch the child process
* Launch the child process
*/
*/
...
@@ -399,17 +334,17 @@ mgt_launch_child(struct cli *cli)
...
@@ -399,17 +334,17 @@ mgt_launch_child(struct cli *cli)
heritage
.
cls
=
mgt_cls
;
heritage
.
cls
=
mgt_cls
;
heritage
.
ident
=
VSB_data
(
vident
)
+
1
;
heritage
.
ident
=
VSB_data
(
vident
)
+
1
;
if
(
mgt_param
.
sigsegv_handler
)
mgt_child_sigmagic
();
(
void
)
signal
(
SIGINT
,
SIG_DFL
);
(
void
)
signal
(
SIGTERM
,
SIG_DFL
);
VJ_subproc
(
JAIL_SUBPROC_WORKER
);
VJ_subproc
(
JAIL_SUBPROC_WORKER
);
heritage
.
proc_vsmw
=
VSMW_New
(
heritage
.
vsm_fd
,
0640
,
"_.index"
);
heritage
.
proc_vsmw
=
VSMW_New
(
heritage
.
vsm_fd
,
0640
,
"_.index"
);
AN
(
heritage
.
proc_vsmw
);
AN
(
heritage
.
proc_vsmw
);
child_main
();
/*
* We pass these two params because child_main needs them
* Well before it has found its own param struct.
*/
child_main
(
mgt_param
.
sigsegv_handler
,
mgt_param
.
wthread_stacksize
);
exit
(
0
);
exit
(
0
);
}
}
...
...
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