diff options
author | Zdenek Prikryl <zprikryl@redhat.com> | 2009-06-17 16:23:36 +0200 |
---|---|---|
committer | Zdenek Prikryl <zprikryl@redhat.com> | 2009-06-17 16:23:36 +0200 |
commit | 085a6ceeb7d3e018ef1db0429f1883070030af1b (patch) | |
tree | 3b75fd7678165996020831e4b5e38bd25d93bdd6 /src/Hooks | |
parent | 5d157e341fed5782c1fbfdd5f820a8d349824e84 (diff) | |
download | abrt-085a6ceeb7d3e018ef1db0429f1883070030af1b.tar.gz abrt-085a6ceeb7d3e018ef1db0429f1883070030af1b.tar.xz abrt-085a6ceeb7d3e018ef1db0429f1883070030af1b.zip |
hook writes new dump only if the daemin is running
Diffstat (limited to 'src/Hooks')
-rw-r--r-- | src/Hooks/CCpp.cpp | 41 | ||||
-rw-r--r-- | src/Hooks/Makefile.am | 3 |
2 files changed, 43 insertions, 1 deletions
diff --git a/src/Hooks/CCpp.cpp b/src/Hooks/CCpp.cpp index 84d023d6..1d895c24 100644 --- a/src/Hooks/CCpp.cpp +++ b/src/Hooks/CCpp.cpp @@ -26,6 +26,7 @@ #include <limits.h> #include <stdio.h> #include <sys/types.h> +#include <sys/stat.h> #include <unistd.h> #include <time.h> #include <syslog.h> @@ -35,6 +36,8 @@ #define FILENAME_CMDLINE "cmdline" #define FILENAME_COREDUMP "coredump" +#define VAR_RUN_PID_FILE VAR_RUN"/abrt.pid" + static void write_success_log(const char* pid) { openlog("abrt", 0, LOG_DAEMON); @@ -93,6 +96,34 @@ char* get_cmdline(const char* pid) return strdup(cmdline); } +#define PID_MAX 16 + +int daemon_is_ok() +{ + char pid[PID_MAX]; + char path[PATH_MAX]; + struct stat buff; + FILE* fp; + if ((fp = fopen(VAR_RUN_PID_FILE, "r")) == NULL) + { + return 0; + } + fgets(pid, sizeof(pid), fp); + if (strrchr(pid, '\n') != NULL) + { + char* newline = strrchr(pid, '\n'); + *newline = '\0'; + } + snprintf(path, sizeof(path), "/proc/%s/stat", pid); + if (stat(path, &buff) == -1) + { + return 0; + } + fclose(fp); + + return 1; +} + int main(int argc, char** argv) { const char* program_name = argv[0]; @@ -115,6 +146,10 @@ int main(int argc, char** argv) { return 0; } + if (!daemon_is_ok()) + { + return 0; + } try { @@ -170,6 +205,12 @@ int main(int argc, char** argv) dd.Close(); write_success_log(pid); } + catch (CABRTException& e) + { + fprintf(stderr, "%s: %s\n", program_name, e.what().c_str()); + write_faliure_log(e.what().c_str()); + return -2; + } catch (std::exception& e) { fprintf(stderr, "%s: %s\n", program_name, e.what()); diff --git a/src/Hooks/Makefile.am b/src/Hooks/Makefile.am index ba067a50..b3ca576a 100644 --- a/src/Hooks/Makefile.am +++ b/src/Hooks/Makefile.am @@ -4,7 +4,8 @@ libexec_PROGRAMS = hookCCpp hookCCpp_SOURCES = CCpp.cpp hookCCpp_LDADD = ../../lib/Utils/libABRTUtils.la hookCCpp_CPPFLAGS = -I$(srcdir)/../../inc -I$(srcdir)/../../lib/Utils \ - -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" + -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" \ + -DVAR_RUN=\"$(VAR_RUN)\" python_PYTHON = sitecustomize.py abrt_exception_handler.py |