[libvirt PATCH 6/7] virMutex*: Warn on error
Daniel P. Berrangé
berrange at redhat.com
Thu Aug 5 16:06:45 UTC 2021
On Thu, Aug 05, 2021 at 05:53:15PM +0200, Peter Krempa wrote:
> On Thu, Aug 05, 2021 at 16:48:59 +0100, Daniel P. Berrangé wrote:
> > On Thu, Aug 05, 2021 at 05:44:15PM +0200, Peter Krempa wrote:
> > > On Thu, Aug 05, 2021 at 16:33:57 +0100, Daniel P. Berrangé wrote:
> > > > On Thu, Aug 05, 2021 at 05:29:24PM +0200, Peter Krempa wrote:
>
> [...]
>
> > Lock state tracking doesn't sound very appealing to me.
> >
> > QEMU makes use of g_auto for unlocking mutexes within scopes
> >
> > WITH_QEMU_LOCK_GUARD(&mutex) {
> > ...
> > if (error) {
> > return; <-- mutex is automatically unlocked
> > }
> >
> > if (early_exit) {
> > break; <-- leave this scope early, unlocking
> > }
> > ...
> > }
> >
> >
> > and another pattern
> >
> > ... <-- mutex not locked
> > QEMU_LOCK_GUARD(&mutex); <-- mutex locked from here onwards
> > ...
> > if (error) {
> > return; <-- mutex is automatically unlocked
> > }
> >
> > This would work for libvirt too, at least for cases where the
> > lock+unlock are in the same scope (which should be the majority).
>
> Yes I thought about this some time ago, but unfortunately in this very
> specific case it doesn't work.
>
> For some specific/historic reason 'virDomainObjNew' returns a locked
> mutex. Caller is expected then to attach the object into the list or
> dispose of it, so this doesn't happen in the same context.
There's not that many callers of virDomainObjNew, nor users of
g_autoptr(virDomainObj), so we could remove that lock call and
push it up into the caller.
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
More information about the libvir-list
mailing list