On Wed, Nov 04, 2009 at 05:51:36PM +0100, Daniel Veillard wrote: > On Tue, Nov 03, 2009 at 02:50:02PM -0500, Daniel P. Berrange wrote: > > In preparation of the monitor I/O process becoming fully asynchronous, > > it is neccessary to ensure all access to internals of the qemuMonitorPtr > > object is protected by a mutex lock. > > > > * src/qemu/qemu_monitor.c, src/qemu/qemu_monitor.h: Add mutex for locking > > monitor. > > * src/qemu/qemu_driver.c: Add locking around all monitor commands > > --- > > src/qemu/qemu_driver.c | 299 +++++++++++++++++++++++++++++++++++------------ > > src/qemu/qemu_monitor.c | 19 +++ > > src/qemu/qemu_monitor.h | 3 + > > 3 files changed, 248 insertions(+), 73 deletions(-) > > [..] > > +++ b/src/qemu/qemu_driver.c > > @@ -141,6 +141,22 @@ static void qemuDomainObjPrivateFree(void *data) > > } > > > > > > +static void qemuDomainObjEnterMonitor(virDomainObjPtr obj) > > +{ > > + qemuDomainObjPrivatePtr priv = obj->privateData; > > + > > + qemuMonitorLock(priv->mon); > > +} > > + > > + > > +static void qemuDomainObjExitMonitor(virDomainObjPtr obj) > > +{ > > + qemuDomainObjPrivatePtr priv = obj->privateData; > > + > > + qemuMonitorUnlock(priv->mon); > > +} > > + > > so we're using pthread mutex here and basically there is no way this > could go wrong and there is no need to handle errors, okay > > > static int qemuCgroupControllerActive(struct qemud_driver *driver, > > int controller) > > { > > the patch is quite regular > > > + qemuDomainObjEnterMonitor(vm); > > + if (qemuMonitorStopCPUs(priv->mon) < 0) { > > + qemuDomainObjExitMonitor(vm); > > goto cleanup; > > + } > > + qemuDomainObjExitMonitor(vm); > > to some extend I wonder if we shouldn't kill all those blocks and > always use the more regular form > > qemuDomainObjEnterMonitor(vm); > ret = qemuMonitorStopCPUs(priv->mon); > qemuDomainObjExitMonitor(vm); > if (ret < 0) > goto cleanup; > > it's simpler, easier to read, we don't have to think about matching > of Enter and Exit, and the generated code probably will be identical > In a number of places the refactoring introduced the later way but > the former is still present in a number of place, closer to original > code but doesn't make the patch safer I'm afraid. The only inconvenience > is the declaration of the temporary variable ... Yes, I think I'll do a further add-on patch to make that change. Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :| -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list