On Thu, Mar 03, 2011 at 11:41:51AM +0000, Daniel P. Berrange wrote: > On Thu, Mar 03, 2011 at 06:22:17PM +0800, Daniel Veillard wrote: > > > > In case of imminent crash or upon request (signal USR2), > > dump the logging buffer to the libvirtd.log file for > > post-mortem analysis > > * daemon/libvirtd.c: create a sig_fatal() handler connected to > > SIGFPE SIGSEGV SIGILL SIGABRT SIGBUS and SIGUSR2, just dumping > > the log buffer to the libvirtd.log open file descriptor [...] > > + /* > > + * If the signal is fatal, avoid looping over this handler > > + * by desactivating it > > + */ > > + if (sig != SIGUSR2) { > > + sig_action.sa_flags = SA_SIGINFO; > > + sig_action.sa_handler = SIG_IGN; > > + sigaction(sig, &sig_action, NULL); > > + } > > + errno = origerrno; > > +} > > I think this code should really be part of the logging.c file. eg create > an API like: > > void virLogEmergencyDumpAll(int signum) > > > And have that dump the cached log buffer to all registered log outputs. > We'd have to excluding any syslog one which isn't async signal safe, but > the 'stderr' or 'file' log outputs can be made async signal safe. yeah, I just need to double check that we just use file descriptor and not FILE *, but it's trivial to check or convert. > Then, the libvirtd signal handler would just be > > static void sig_fatal(int sig, siginfo_t * siginfo ATTRIBUTE_UNUSED, > void* context ATTRIBUTE_UNUSED) { > virLogEmergencyDumpAll(sig); well we will still need the above bit of sigaction, but yes, Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list