
On Mon, Jan 12, 2009 at 11:30:19AM +0000, Daniel P. Berrange wrote:
There's different needs for each file descriptor
- stdin_fd - this is only ever used for incoming migration data all other times it is hooked up to /dev/null. So we don't need to keep this FD around at all Agreed.
- stdout_fd - AFAIK, the only time we get any data on stdout is when we run qemu -help to check support args. Current code will read & log all data on stdout, but I believe this is effectively nothing and so we could just hook it to /dev/null & ignore it We can just dup that one too while at it in case qemu/kvm should dump anything else there.
- stderr_fd - libvirtd reads this FD & logs the data to the domain logfile in /var/log/libvirt/qemu/$NAME.log. Instead of having the daemon process this logging, we can just dup() the file straight onto the logfile FD, so data will be logged even when libvirtd is not running. The only minor complication is that we need to parse the logfile to get the monitor TTY path. There's one more thing (which was my intial reason for asking): we also use this fd in qemudDispatchVMEvent() to detect vm shutdown:
if (events & VIR_EVENT_HANDLE_READABLE) { if (qemudVMData(driver, vm, fd) < 0) failed = 1; } else { quit = 1; } } if (failed || quit) { event = virDomainEventNewFromObj(vm, VIR_DOMAIN_EVENT_STOPPED, quit ? VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN : VIR_DOMAIN_EVENT_STOPPED_FAILED); qemudShutdownVMDaemon(NULL, driver, vm); if (!vm->persistent) { virDomainRemoveInactive(&driver->domains, vm); vm = NULL; } Using the monitor fd for this instead should work. Would that be o.k.? -- Guido