Skip to content

Commit

Permalink
timemaster: ignore failures of non-essential processes.
Browse files Browse the repository at this point in the history
Assume only the chronyd or ntpd process is essential for synchronization
of the system clock and ignore SIGCHLD from other processes. This should
provide resiliency against possible bugs in ptp4l or phc2sys that can
terminate the processes.

Signed-off-by: Miroslav Lichvar <[email protected]>
  • Loading branch information
mlichvar authored and richardcochran committed Jul 16, 2016
1 parent 395544d commit 914ca86
Showing 1 changed file with 23 additions and 8 deletions.
31 changes: 23 additions & 8 deletions timemaster.c
Original file line number Diff line number Diff line change
Expand Up @@ -1035,6 +1035,14 @@ static int script_run(struct script *script)
pid_t pid, *pids;
int i, num_commands, status, ret = 0;

for (num_commands = 0; script->commands[num_commands]; num_commands++)
;

if (!num_commands) {
/* nothing to do */
return 0;
}

if (create_config_files(script->configs))
return 1;

Expand All @@ -1050,9 +1058,6 @@ static int script_run(struct script *script)
return 1;
}

for (num_commands = 0; script->commands[num_commands]; num_commands++)
;

pids = xcalloc(num_commands, sizeof(*pids));

for (i = 0; i < num_commands; i++) {
Expand All @@ -1065,15 +1070,25 @@ static int script_run(struct script *script)

/* wait for one of the blocked signals */
while (1) {
if (sigwaitinfo(&mask, &info) > 0)
break;
if (errno != EINTR) {
if (sigwaitinfo(&mask, &info) < 0) {
if (errno == EINTR)
continue;
pr_err("sigwaitinfo() failed: %m");
break;
}
}

pr_info("received signal %d", info.si_signo);
/*
* assume only the first process (i.e. chronyd or ntpd) is
* essential and continue if other processes terminate
*/
if (info.si_signo == SIGCHLD && info.si_pid != pids[0]) {
pr_info("process %d terminated (ignored)", info.si_pid);
continue;
}

pr_info("received signal %d", info.si_signo);
break;
}

/* kill all started processes */
for (i = 0; i < num_commands; i++) {
Expand Down

0 comments on commit 914ca86

Please sign in to comment.