[libvirt] [PATCH 1/2] qemu: Turn closeCallbacks into virObjectLockable
Jiri Denemark
jdenemar at redhat.com
Tue Feb 19 20:45:39 UTC 2013
On Tue, Feb 19, 2013 at 14:26:37 +0000, Daniel P. Berrange wrote:
> On Mon, Feb 18, 2013 at 05:07:44PM +0100, Jiri Denemark wrote:
> > To avoid having to hold the qemu driver lock while iterating through
> > close callbacks and calling them. This fixes a real deadlock when a
> > domain which is being migrated from another host gets autodestoyed as a
> > result of broken connection to the other host.
>
> Since you're turning this into a full object, I think it would be
> nice to move it to a standalone file, so it can be reused by the
> LXC driver, which currently re-invents this same kind of code.
Good idea, could it be done by a follow-up patch? What do you think
would be the best name for such a shared object? I guess something like
virConnectCloseCallbacks could make sense...
> > -VIR_ONCE_GLOBAL_INIT(virQEMUConfig)
> > +static int
> > +virQEMUCloseCallbacksOnceInit(void)
> > +{
> > + virQEMUCloseCallbacksClass = virClassNew(virClassForObjectLockable(),
> > + "virQEMUCloseCallbacks",
> > + sizeof(virQEMUCloseCallbacks),
> > + virQEMUCloseCallbacksDispose);
> > + if (!virQEMUCloseCallbacksClass)
> > + return -1;
> > + return 0;
> > +}
> >
> > +VIR_ONCE_GLOBAL_INIT(virQEMUConfig)
> > +VIR_ONCE_GLOBAL_INIT(virQEMUCloseCallbacks)
>
> No need for two initializers, just make the virQEMUConfigOnceInit
> method create both classes.
OK, they will need to be separated again once this is decoupled from
qemu driver but that's fine.
> > -typedef virDomainObjPtr (*qemuDriverCloseCallback)(virQEMUDriverPtr driver,
> > - virDomainObjPtr vm,
> > - virConnectPtr conn);
> > -int qemuDriverCloseCallbackInit(virQEMUDriverPtr driver);
> > -void qemuDriverCloseCallbackShutdown(virQEMUDriverPtr driver);
> > -int qemuDriverCloseCallbackSet(virQEMUDriverPtr driver,
> > +typedef virDomainObjPtr (*virQEMUCloseCallback)(virQEMUDriverPtr driver,
> > + virDomainObjPtr vm,
> > + virConnectPtr conn);
> > +virQEMUCloseCallbacksPtr virQEMUCloseCallbacksNew(void);
> > +int virQEMUCloseCallbacksSet(virQEMUDriverPtr driver,
>
> I was rather expecting to see the virQEMUDriverPtr replacd
> with a virQEMUCloseCallbacksPtr in all the methods now it
> becomes a full object.
I guess I was just lazy and didn't want to change callers too much :-) I
would need to do that when moving the code out of qemu driver anyway,
though.
> ACK to the general approach, but I think there's a few tweaks needed
> still.
OK, v2 is coming soon.
Jirka
More information about the libvir-list
mailing list