<br><div class="gmail_quote">On Tue, Mar 6, 2012 at 9:41 AM, huxinwei <span dir="ltr"><<a href="mailto:huxinwei@huawei.com" target="_blank">huxinwei@huawei.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div><div>> -----Original Message-----<br>
> From: <a href="mailto:sheepdog-bounces@lists.wpkg.org" target="_blank">sheepdog-bounces@lists.wpkg.org</a><br>
> [mailto:<a href="mailto:sheepdog-bounces@lists.wpkg.org" target="_blank">sheepdog-bounces@lists.wpkg.org</a>] On Behalf Of Yunkai Zhang<br>
> Sent: Friday, March 02, 2012 11:42 PM<br>
> To: <a href="mailto:morita.kazutaka@lab.ntt.co.jp" target="_blank">morita.kazutaka@lab.ntt.co.jp</a><br>
> Cc: Yunkai Zhang; <a href="mailto:sheepdog@lists.wpkg.org" target="_blank">sheepdog@lists.wpkg.org</a><br>
> Subject: [Sheepdog] [PATCH] Enable sheepdog generate core dump file<br>
><br>
> If sheepdog received SIGSEGV signal and we have enabled<br>
> OS to generate it, core dump file would be created in<br>
> LOCALSTATEDIR/lib/sheepdog directory.<br>
><br>
> We can find the vaule of LOCALSTATEDIR in include/config.h.<br>
><br>
> Signed-off-by: Yunkai Zhang <<a href="mailto:qiushu.zyk@taobao.com" target="_blank">qiushu.zyk@taobao.com</a>><br>
> ---<br>
>  lib/logger.c |   20 +++++++++++++++-----<br>
>  1 files changed, 15 insertions(+), 5 deletions(-)<br>
><br>
> diff --git a/lib/logger.c b/lib/logger.c<br>
> index 5be035a..c78329e 100644<br>
> --- a/lib/logger.c<br>
> +++ b/lib/logger.c<br>
> @@ -29,6 +29,7 @@<br>
>  #include <sys/wait.h><br>
>  #include <sys/prctl.h><br>
><br>
> +#include "../include/config.h"<br>
>  #include "logger.h"<br>
>  #include "util.h"<br>
><br>
> @@ -355,11 +356,12 @@ static void log_flush(void)<br>
><br>
>  static void log_sigsegv(void)<br>
>  {<br>
> +     (void)signal(SIGSEGV, SIG_DFL);<br>
>       vprintf(SDOG_ERR, "logger pid %d exiting abnormally\n", getpid());<br>
>       log_flush();<br>
>       closelog();<br>
>       free_logarea();<br>
> -     exit(1);<br>
> +     raise(SIGSEGV);<br>
<br>
</div></div>Er, I'm not sure if this makes sense here to raise the signal again.<br>
<br>
Here in logger, SIGSEGV usually generated by the exiting of parent process (caused by prctl).<br>
So it has nothing to do with the core dump of sheep itself.</blockquote><div> </div><div>You are right, I haven't noticed that the core dump file would be placed in / directory.</div><div><br></div><div>Generally, we should put the core dump file in a <span style="background-color:rgb(255,255,255);font-family:arial,sans-serif;font-size:13px;white-space:nowrap">particular directory so that users can find it easily, maybe</span>  LOCALSTATEDIR+"/lib/sheepdog" will be a good path for it.</div>
<div><br></div><div>Thanks.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<br>
Actually, I'd like to propose a patch to rename log_sigsegv to log_sigparentexit ;)<br>
Will send out a patch about logger soon.<br>
<div><div><br>
>  }<br>
><br>
>  int log_init(char *program_name, int size, int is_daemon, int level, char<br>
> *outfile)<br>
> @@ -372,6 +374,7 @@ int log_init(char *program_name, int size, int<br>
> is_daemon, int level, char *outfi<br>
>       semkey = random();<br>
><br>
>       if (is_daemon) {<br>
> +             const char *run_dir;<br>
>               struct sigaction sa_old;<br>
>               struct sigaction sa_new;<br>
>               int fd;<br>
> @@ -395,6 +398,17 @@ int log_init(char *program_name, int size, int<br>
> is_daemon, int level, char *outfi<br>
><br>
>               la->active = 1;<br>
>               la->fd = fd;<br>
> +<br>
> +             run_dir = LOCALSTATEDIR "/lib/sheepdog";<br>
> +             if ((mkdir(run_dir, 0700)) == -1 && errno != EEXIST) {<br>
> +                     syslog(LOG_ERR, "failed to mkdir -p to %s: %m\n", run_dir);<br>
> +             }<br>
> +<br>
> +             if (chdir(run_dir) < 0) {<br>
> +                     syslog(LOG_ERR, "failed to chdir to %s: %m\n", run_dir);<br>
> +                     exit(1);<br>
> +             }<br>
> +<br>
>               pid = fork();<br>
>               if (pid < 0) {<br>
>                       syslog(LOG_ERR, "failed to fork the logger process: %m\n");<br>
> @@ -414,10 +428,6 @@ int log_init(char *program_name, int size, int<br>
> is_daemon, int level, char *outfi<br>
>               dup2(fd, 1);<br>
>               dup2(fd, 2);<br>
>               setsid();<br>
> -             if (chdir("/") < 0) {<br>
> -                     syslog(LOG_ERR, "failed to chdir to /: %m\n");<br>
> -                     exit(1);<br>
> -             }<br>
><br>
>               /* flush on daemon's crash */<br>
>               sa_new.sa_handler = (void*)log_sigsegv;<br>
> --<br>
> 1.7.7.6<br>
><br>
</div></div><span><font color="#888888">> --<br>
> sheepdog mailing list<br>
> <a href="mailto:sheepdog@lists.wpkg.org" target="_blank">sheepdog@lists.wpkg.org</a><br>
> <a href="http://lists.wpkg.org/mailman/listinfo/sheepdog" target="_blank">http://lists.wpkg.org/mailman/listinfo/sheepdog</a><br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br>Yunkai Zhang<div>Work at Taobao</div><br>