On 11/22/2010 11:09 AM, Daniel P. Berrange wrote:
> Perform a handshake during QEMU startup to allow file relabelling
> to be performed after QEMU has been forked, but before it has
> been exec'd. This is to allow the lock manager to acquire locks
> against the QEMU pid, before relabelling takes place
>
> * src/qemu/qemu_driver.c: Handshake during QEMU startup
> ---
> src/qemu/qemu_driver.c | 23 ++++++++++++++---------
> 1 files changed, 14 insertions(+), 9 deletions(-)
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 0b0b6fe..bf6cd0e 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -3683,9 +3683,6 @@ static int qemudSecurityHook(void *data) {
> if (virSecurityManagerSetProcessLabel(h->driver->securityManager, h->vm)
> < 0)
> goto cleanup;
>
> - /* XXX temp hack to let disk labelling complete */
> - sleep(10);
> -
> ret = 0;
>
> cleanup:
> @@ -4097,28 +4094,36 @@ static int qemudStartVMDaemon(virConnectPtr conn,
> virCommandSetErrorFD(cmd, &logfile);
> virCommandSetPidFile(cmd, pidfile);
> virCommandDaemonize(cmd);
> + virCommandRequireHandshake(cmd);
>
> ret = virCommandRun(cmd, NULL);
Oh, I see - you want to daemonize, require handshake, AND do a blocking
virCommandRun. I see now - __virExec does two forks when daemonize is
requested, and only runs the callback hook in the second (daemon) child,
rather than in the (short-lived) intermediary. That answers some of my
questions in the previous patch.
> - VIR_WARN("Executing done %s", vm->def->emulator);
> VIR_FREE(pidfile);
>
> - /* XXX this is bollocks. Need a sync point */
> - sleep(5);
> + VIR_WARN0("Waiting for handshake from child");
> + if (virCommandHandshakeWait(cmd) < 0) {
But it still probably requires virCommand to do some sanity checking
that HandshakeWait is called after the child has been spawned.
>
> + VIR_WARN0("Labelling done, completing hanshake to child");
s/hanshake/handshake/
Definitely an improvement.
--
Eric Blake [email protected] +1-801-349-2682
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
-- libvir-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/libvir-list
