|
|
|
|
|
|
|
|
|
|
xen-devel
Re: [Xen-devel] Re: [Xen-changelog] Make xenstored reopen its trace file
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
|
|
|
|
|