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@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|