On Tue, Apr 08, 2008 at 04:45:23AM -0400, Daniel Veillard wrote:
Then what happen if you pass a wrong string ? Is there any way to get
a
meaningful error back from qemu and report it. Thet would IMHO be quite
better than tracking the evolution of the emulation in QEmu, plus the
added benefit of not being tied to a strict version of QEmu,
The error handling in this part of the code seems a bit confused at
the moment. For example:
if (virExecNonBlock(conn, argv, &vm->pid,
vm->stdin, &vm->stdout, &vm->stderr) == 0) {
/* [add new qemu to list of VMs] */
}
/* [free up various resources] */
if (virEventAddHandle(vm->stdout,
POLLIN | POLLERR | POLLHUP,
qemudDispatchVMEvent,
driver) < 0) {
qemudShutdownVMDaemon(conn, driver, vm);
return -1;
}
/* [another call to virEventAddHandle] */
if (qemudWaitForMonitor(conn, driver, vm) < 0) {
qemudShutdownVMDaemon(conn, driver, vm);
return -1;
}
return 0;
If virExecNonBlock fails, because one of the system calls such as
fork(2) or pipe(2) fails, then vm->stdout may be uninitialized. I
think it will assume the value 0 in this case and virEventAddHandle
will quite happily register a handler for fd 0.
On the other hand it is tricky to know what to do when launching a
process. In the case where KVM doesn't understand part of the command
line arguments, the fork & exec will both succeed and the earliest
point where we will see any error will be at qemudWaitForMonitor
(because the monitor won't come up -- note this code is synchronous).
Rich.
--
Richard Jones, Emerging Technologies, Red Hat
http://et.redhat.com/~rjones
virt-top is 'top' for virtual machines. Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://et.redhat.com/~rjones/virt-top