X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fdaemon.c;h=82d1c9e5c3c5c9667bbb5853d1c205735d3a7e3b;hb=1a3be581e0f5a91de90d62d8cb8b41fd774efec5;hp=1824ef07d2924f46891fcdb81395c7ed4c1bd030;hpb=7ef1b50f481cda83d012cc3d69d83f9313836f1f;p=yaz-moved-to-github.git diff --git a/src/daemon.c b/src/daemon.c index 1824ef0..82d1c9e 100644 --- a/src/daemon.c +++ b/src/daemon.c @@ -1,5 +1,5 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2008 Index Data + * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ @@ -19,15 +19,12 @@ #include #endif #include -#include #if HAVE_SYS_WAIT_H #include #endif +#if HAVE_SYS_TYPES_H #include - -#if HAVE_SYS_STAT_H -#include #endif #include @@ -36,6 +33,10 @@ #include #endif +#if HAVE_SYS_PRCTL_H +#include +#endif + #include #include #include @@ -52,7 +53,7 @@ static void write_pidfile(int pid_fd) yaz_log(YLOG_FATAL|YLOG_ERRNO, "ftruncate"); exit(1); } - if (write(pid_fd, buf, strlen(buf)) != strlen(buf)) + if (write(pid_fd, buf, strlen(buf)) != (int) strlen(buf)) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "write"); exit(1); @@ -74,12 +75,14 @@ static void keepalive(void (*work)(void *data), void *data) int cont = 1; void (*old_sighup)(int); void (*old_sigterm)(int); + void (*old_sigusr1)(int); /* keep signals in their original state and make sure that some signals to parent process also gets sent to the child.. */ old_sighup = signal(SIGHUP, kill_child_handler); old_sigterm = signal(SIGTERM, kill_child_handler); + old_sigusr1 = signal(SIGUSR1, kill_child_handler); while (cont) { pid_t p = fork(); @@ -96,6 +99,7 @@ static void keepalive(void (*work)(void *data), void *data) /* child */ signal(SIGHUP, old_sighup); /* restore */ signal(SIGTERM, old_sigterm);/* restore */ + signal(SIGUSR1, old_sigusr1);/* restore */ work(data); exit(0); @@ -202,6 +206,13 @@ int yaz_daemon(const char *progname, yaz_log(YLOG_FATAL|YLOG_ERRNO, "setuid"); exit(1); } + /* Linux don't produce core dumps evern if the limit is right and + files are writable.. This fixes this. See prctl(2) */ +#if HAVE_SYS_PRCTL_H +#ifdef PR_SET_DUMPABLE + prctl(PR_SET_DUMPABLE, 1, 0, 0); +#endif +#endif } if (flags & YAZ_DAEMON_FORK) @@ -273,7 +284,9 @@ int yaz_daemon(const char *progname, /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ +