[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |