[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] Re: [Xen-changelog] Make xenstored reopen its trace file on SIGHUP. This allows one to rotate the



On Monday 07 November 2005 11:15, Anthony Liguori 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.

I'm really not sure how strlen could be non-threadsafe. I don't care if it's 
not in your list; your list doesn't include strtok_r either, and that is 
explicitly thread-safe. :-P

However, in addition to perror, another thread could try to use tracefd 
between the close and the open. You'd probably want to do something like:
        oldfd = tracefd;
        newfd = open();
        if (newfd < 0) {
                ...
        }
        tracefd = newfd;
        close(oldfd);

Finally, you really should do error-checking on close(). See the close(2) man 
page...

-- 
Hollis Blanchard
IBM Linux Technology Center

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.