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 :|