core: add valgrind helper for daemon-reexec

Inspired by https://github.com/systemd/systemd/issues/2187#issuecomment-165587140
This commit is contained in:
Evgeny Vereshchagin
2016-01-21 01:32:05 +00:00
parent 91c4b6db78
commit dcadc9671c
3 changed files with 31 additions and 0 deletions
+20
View File
@@ -33,6 +33,9 @@
#include <sys/wait.h>
#include <syslog.h>
#include <unistd.h>
#ifdef HAVE_VALGRIND_VALGRIND_H
#include <valgrind/valgrind.h>
#endif
#include "alloc-util.h"
#include "escape.h"
@@ -730,6 +733,23 @@ const char* personality_to_string(unsigned long p) {
return NULL;
}
void valgrind_summary_hack(void) {
#ifdef HAVE_VALGRIND_VALGRIND_H
if (getpid() == 1 && RUNNING_ON_VALGRIND) {
pid_t pid;
pid = raw_clone(SIGCHLD, NULL);
if (pid < 0)
log_emergency_errno(errno, "Failed to fork off valgrind helper: %m");
else if (pid == 0)
exit(EXIT_SUCCESS);
else {
log_info("Spawned valgrind helper as PID "PID_FMT".", pid);
(void) wait_for_terminate(pid, NULL);
}
}
#endif
}
static const char *const ioprio_class_table[] = {
[IOPRIO_CLASS_NONE] = "none",
[IOPRIO_CLASS_RT] = "realtime",