Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
N
nghttp2
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
nghttp2
Commits
494775a2
Commit
494775a2
authored
Jul 31, 2016
by
Tatsuhiro Tsujikawa
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
nghttpx: Rename SignalServer with WorkerProcess
parent
1214f9e2
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
41 additions
and
41 deletions
+41
-41
src/shrpx.cc
src/shrpx.cc
+41
-41
No files found.
src/shrpx.cc
View file @
494775a2
...
...
@@ -158,8 +158,8 @@ namespace {
void
worker_process_child_cb
(
struct
ev_loop
*
loop
,
ev_child
*
w
,
int
revents
);
}
// namespace
struct
SignalServer
{
SignalServer
(
struct
ev_loop
*
loop
,
pid_t
worker_pid
,
int
ipc_fd
)
struct
WorkerProcess
{
WorkerProcess
(
struct
ev_loop
*
loop
,
pid_t
worker_pid
,
int
ipc_fd
)
:
loop
(
loop
),
worker_pid
(
worker_pid
),
ipc_fd
(
ipc_fd
)
{
ev_signal_init
(
&
reopen_log_signalev
,
signal_cb
,
REOPEN_LOG_SIGNAL
);
reopen_log_signalev
.
data
=
this
;
...
...
@@ -184,7 +184,7 @@ struct SignalServer {
ev_child_start
(
loop
,
&
worker_process_childev
);
}
~
SignalServer
()
{
~
WorkerProcess
()
{
shutdown_signal_watchers
();
ev_child_stop
(
loop
,
&
worker_process_childev
);
...
...
@@ -213,52 +213,52 @@ struct SignalServer {
};
namespace
{
void
reload_config
(
SignalServer
*
ssv
);
void
reload_config
(
WorkerProcess
*
wp
);
}
// namespace
namespace
{
std
::
deque
<
std
::
unique_ptr
<
SignalServer
>>
signal_server
s
;
std
::
deque
<
std
::
unique_ptr
<
WorkerProcess
>>
worker_processe
s
;
}
// namespace
namespace
{
void
signal_server_add
(
std
::
unique_ptr
<
SignalServer
>
ssv
)
{
signal_servers
.
push_back
(
std
::
move
(
ssv
));
void
worker_process_add
(
std
::
unique_ptr
<
WorkerProcess
>
wp
)
{
worker_processes
.
push_back
(
std
::
move
(
wp
));
}
}
// namespace
namespace
{
void
signal_server_remove
(
const
SignalServer
*
ssv
)
{
for
(
auto
it
=
std
::
begin
(
signal_servers
);
it
!=
std
::
end
(
signal_server
s
);
void
worker_process_remove
(
const
WorkerProcess
*
wp
)
{
for
(
auto
it
=
std
::
begin
(
worker_processes
);
it
!=
std
::
end
(
worker_processe
s
);
++
it
)
{
auto
&
s
=
*
it
;
if
(
s
.
get
()
!=
ssv
)
{
if
(
s
.
get
()
!=
wp
)
{
continue
;
}
signal_server
s
.
erase
(
it
);
worker_processe
s
.
erase
(
it
);
break
;
}
}
}
// namespace
namespace
{
void
signal_server
_remove_all
()
{
std
::
deque
<
std
::
unique_ptr
<
SignalServer
>>
().
swap
(
signal_server
s
);
void
worker_process
_remove_all
()
{
std
::
deque
<
std
::
unique_ptr
<
WorkerProcess
>>
().
swap
(
worker_processe
s
);
}
}
// namespace
namespace
{
// Send signal |signum| to all worker processes, and clears
//
signal_server
s.
void
signal_server
_kill
(
int
signum
)
{
for
(
auto
&
s
:
signal_server
s
)
{
//
worker_processe
s.
void
worker_process
_kill
(
int
signum
)
{
for
(
auto
&
s
:
worker_processe
s
)
{
if
(
s
->
worker_pid
==
-
1
)
{
continue
;
}
kill
(
s
->
worker_pid
,
signum
);
}
signal_server
s
.
clear
();
worker_processe
s
.
clear
();
}
}
// namespace
...
...
@@ -330,7 +330,7 @@ void save_pid() {
}
// namespace
namespace
{
void
exec_binary
(
SignalServer
*
ssv
)
{
void
exec_binary
(
WorkerProcess
*
wp
)
{
int
rv
;
sigset_t
oldset
;
...
...
@@ -460,9 +460,9 @@ void exec_binary(SignalServer *ssv) {
}
// namespace
namespace
{
void
ipc_send
(
SignalServer
*
ssv
,
uint8_t
ipc_event
)
{
void
ipc_send
(
WorkerProcess
*
wp
,
uint8_t
ipc_event
)
{
ssize_t
nwrite
;
while
((
nwrite
=
write
(
ssv
->
ipc_fd
,
&
ipc_event
,
1
))
==
-
1
&&
errno
==
EINTR
)
while
((
nwrite
=
write
(
wp
->
ipc_fd
,
&
ipc_event
,
1
))
==
-
1
&&
errno
==
EINTR
)
;
if
(
nwrite
<
0
)
{
...
...
@@ -480,38 +480,38 @@ void ipc_send(SignalServer *ssv, uint8_t ipc_event) {
}
// namespace
namespace
{
void
reopen_log
(
SignalServer
*
ssv
)
{
void
reopen_log
(
WorkerProcess
*
wp
)
{
LOG
(
NOTICE
)
<<
"Reopening log files: master process"
;
(
void
)
reopen_log_files
();
redirect_stderr_to_errorlog
();
ipc_send
(
ssv
,
SHRPX_IPC_REOPEN_LOG
);
ipc_send
(
wp
,
SHRPX_IPC_REOPEN_LOG
);
}
}
// namespace
namespace
{
void
signal_cb
(
struct
ev_loop
*
loop
,
ev_signal
*
w
,
int
revents
)
{
auto
ssv
=
static_cast
<
SignalServer
*>
(
w
->
data
);
if
(
ssv
->
worker_pid
==
-
1
)
{
auto
wp
=
static_cast
<
WorkerProcess
*>
(
w
->
data
);
if
(
wp
->
worker_pid
==
-
1
)
{
ev_break
(
loop
);
return
;
}
switch
(
w
->
signum
)
{
case
REOPEN_LOG_SIGNAL
:
reopen_log
(
ssv
);
reopen_log
(
wp
);
return
;
case
EXEC_BINARY_SIGNAL
:
exec_binary
(
ssv
);
exec_binary
(
wp
);
return
;
case
GRACEFUL_SHUTDOWN_SIGNAL
:
ipc_send
(
ssv
,
SHRPX_IPC_GRACEFUL_SHUTDOWN
);
ipc_send
(
wp
,
SHRPX_IPC_GRACEFUL_SHUTDOWN
);
return
;
case
RELOAD_SIGNAL
:
reload_config
(
ssv
);
reload_config
(
wp
);
return
;
default:
signal_server
_kill
(
w
->
signum
);
worker_process
_kill
(
w
->
signum
);
ev_break
(
loop
);
return
;
}
...
...
@@ -520,13 +520,13 @@ void signal_cb(struct ev_loop *loop, ev_signal *w, int revents) {
namespace
{
void
worker_process_child_cb
(
struct
ev_loop
*
loop
,
ev_child
*
w
,
int
revents
)
{
auto
ssv
=
static_cast
<
SignalServer
*>
(
w
->
data
);
auto
wp
=
static_cast
<
WorkerProcess
*>
(
w
->
data
);
log_chld
(
w
->
rpid
,
w
->
rstatus
,
"Worker process"
);
auto
pid
=
ssv
->
worker_pid
;
auto
pid
=
wp
->
worker_pid
;
signal_server_remove
(
ssv
);
worker_process_remove
(
wp
);
if
(
get_config
()
->
last_worker_pid
==
pid
)
{
ev_break
(
loop
);
...
...
@@ -1096,9 +1096,9 @@ pid_t fork_worker_process(int &main_ipc_fd) {
if
(
pid
==
0
)
{
ev_loop_fork
(
EV_DEFAULT
);
// Remove all
SignalServer
s to stop any registered watcher on
// Remove all
WorkerProcesse
s to stop any registered watcher on
// default loop.
signal_server
_remove_all
();
worker_process
_remove_all
();
shrpx_signal_set_worker_proc_ign_handler
();
...
...
@@ -1193,7 +1193,7 @@ int event_loop() {
return
-
1
;
}
signal_server_add
(
make_unique
<
SignalServer
>
(
loop
,
pid
,
ipc_fd
));
worker_process_add
(
make_unique
<
WorkerProcess
>
(
loop
,
pid
,
ipc_fd
));
mod_config
()
->
last_worker_pid
=
pid
;
...
...
@@ -2484,7 +2484,7 @@ int process_options(Config *config,
}
// namespace
namespace
{
void
reload_config
(
SignalServer
*
ssv
)
{
void
reload_config
(
WorkerProcess
*
wp
)
{
int
rv
;
LOG
(
NOTICE
)
<<
"Reloading configuration"
;
...
...
@@ -2518,7 +2518,7 @@ void reload_config(SignalServer *ssv) {
// TODO loop is reused, and new_config->ev_loop_flags gets ignored
auto
loop
=
ssv
->
loop
;
auto
loop
=
wp
->
loop
;
int
ipc_fd
;
...
...
@@ -2532,12 +2532,12 @@ void reload_config(SignalServer *ssv) {
close_unused_inherited_addr
(
iaddrs
);
// Send last worker process a graceful shutdown notice
auto
&
last_
ssv
=
signal_server
s
.
back
();
ipc_send
(
last_
ssv
.
get
(),
SHRPX_IPC_GRACEFUL_SHUTDOWN
);
auto
&
last_
wp
=
worker_processe
s
.
back
();
ipc_send
(
last_
wp
.
get
(),
SHRPX_IPC_GRACEFUL_SHUTDOWN
);
// We no longer use signals for this worker.
last_
ssv
->
shutdown_signal_watchers
();
last_
wp
->
shutdown_signal_watchers
();
signal_server_add
(
make_unique
<
SignalServer
>
(
loop
,
pid
,
ipc_fd
));
worker_process_add
(
make_unique
<
WorkerProcess
>
(
loop
,
pid
,
ipc_fd
));
new_config
->
last_worker_pid
=
pid
;
...
...
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