[Sheepdog] [PATCH] Cleanup the log function
Liu Yuan
namei.unix at gmail.com
Wed Mar 7 04:59:20 CET 2012
On 03/06/2012 05:40 PM, huxinwei wrote:
> Hi List,
>
> The log_sigsegv function in logger.c actually serves two purposes.
> 1, the logger itself exit on illegal memory access.
> 2, the sheep exit, which makes the kernel deliver a SIGSEGV to the logger process
>
> I think it'll be a good idea to make distinguish between these 2.
> Please help to review and make comments.
>
> Thanks.
>
> Signed-off-by: Xinwei Hu <huxinwei at huawei.com>
> diff --git a/lib/logger.c b/lib/logger.c
> index 5be035a..d5eb453 100644
> --- a/lib/logger.c
> +++ b/lib/logger.c
> @@ -353,9 +353,14 @@ static void log_flush(void)
> }
> }
>
> -static void log_sigsegv(void)
> +static void log_sigexit(int signo)
> {
> - vprintf(SDOG_ERR, "logger pid %d exiting abnormally\n", getpid());
> + if (signo == SIGSEGV)
> + vprintf(SDOG_ERR, "logger pid %d exiting abnormally\n", getpid());
> + else if (signo == SIGHUP)
> + vprintf(SDOG_ERR, "sheep pid %d exiting.\n", pid);
> + else
> + vprintf(SDOG_ERR, "something wrong.\n");
> log_flush();
> closelog();
> free_logarea();
> @@ -419,13 +424,15 @@ int log_init(char *program_name, int size, int is_daemon, int level, char *outfi
> exit(1);
> }
>
> + pid = getppid();
> /* flush on daemon's crash */
> - sa_new.sa_handler = (void*)log_sigsegv;
> + sa_new.sa_handler = (void*)log_sigexit;
> sigemptyset(&sa_new.sa_mask);
> sa_new.sa_flags = 0;
> sigaction(SIGSEGV, &sa_new, &sa_old );
> + sigaction(SIGHUP, &sa_new, &sa_old );
>
> - prctl(PR_SET_PDEATHSIG, SIGSEGV);
> + prctl(PR_SET_PDEATHSIG, SIGHUP);
>
> while (la->active) {
> log_flush();
Ah, this is a nice candy. I have long wanted to do it. Applied, thanks,
Yuan
More information about the sheepdog
mailing list