From dd0737f8e7febe832d86312c9c311c9fede82b7f Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Fri, 25 Apr 2008 22:09:52 +0200 Subject: [PATCH] Detect and log errors in crash_dump() --- src/server/main.c | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/server/main.c b/src/server/main.c index cd9de4fd..cc8e6699 100644 --- a/src/server/main.c +++ b/src/server/main.c @@ -40,6 +40,9 @@ #include #include #include +#ifndef _WIN32 +#include +#endif #include #if defined(_WIN32) @@ -315,9 +318,29 @@ ignore(void) static void crash_dump(void) { -#ifndef _WIN32 - if (fork() == 0) - abort(); +#ifdef _WIN32 + logerror("Crash dump is not implemented"); +#else + pid_t pid; + int status; + + pid = fork(); + if (pid < 0) { + logerror("Can't fork for crash dump (%s)", strerror(errno)); + return; + } + if (pid == 0) + abort(); /* child */ + + /* parent */ + while (waitpid(pid, &status, 0) < 0) { + if (errno != EINTR) { + logerror("Can't get crash dumping child's status (%s)", + strerror(errno)); + return; + } + } + logerror("Crash dump complete"); #endif }