From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anthony Liguori Subject: Re: [Xen-changelog] Make xenstored reopen its trace file on SIGHUP. This allows one to rotate the Date: Mon, 07 Nov 2005 11:15:34 -0600 Message-ID: <436F8BB6.1090207@us.ibm.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com Cc: Ewan Mellor List-Id: xen-devel@lists.xenproject.org Xen patchbot -unstable wrote: > >+void reopen_log() >+{ >+ if (!tracefile) >+ return; >+ >+ if (tracefd > 0) >+ close(tracefd); >+ tracefd = open(tracefile, O_WRONLY|O_CREAT|O_APPEND, 0600); >+ if (tracefd < 0) { >+ perror("Could not open tracefile"); >+ return; >+ } >+ write(tracefd, "\n***\n", strlen("\n***\n")); >+} >+ > > perror and strlen are not safe to call from a signal handler. I suggest just removing the perror call altogether and replacing strlen with sizeof() - 1. Regards, Anthony Liguori > static bool write_messages(struct connection *conn) > { > int ret; >@@ -1498,11 +1514,7 @@ > outputpid = true; > break; > case 'T': >- tracefd = open(optarg, O_WRONLY|O_CREAT|O_APPEND, 0600); >- if (tracefd < 0) >- barf_perror("Could not open tracefile %s", >- optarg); >- write(tracefd, "\n***\n", strlen("\n***\n")); >+ tracefile = optarg; > break; > case 'V': > verbose = true; >@@ -1511,6 +1523,8 @@ > } > if (optind != argc) > barf("%s: No arguments desired", argv[0]); >+ >+ reopen_log(); > > if (dofork) { > openlog("xenstored", 0, LOG_DAEMON); >@@ -1577,6 +1591,8 @@ > close(STDOUT_FILENO); > close(STDERR_FILENO); > } >+ >+ signal(SIGHUP, reopen_log); > > #ifdef TESTING > signal(SIGUSR1, stop_failtest); > >_______________________________________________ >Xen-changelog mailing list >Xen-changelog@lists.xensource.com >http://lists.xensource.com/xen-changelog > > >