[Libguestfs] [PATCH] library: per-handle locking support
Richard W.M. Jones
rjones at redhat.com
Fri Jun 6 05:16:02 UTC 2014
On Thu, Jun 05, 2014 at 07:33:15PM +0200, Maros Zatko wrote:
> First I've put recursive mutex into handle. This worked.
> Next, due to previous discussion about this recursive manner, I've
> tried it with ordinary ones.
> This doesn't work. make check hangs on tests/qemu, other tests try
> to double acquire lock and hangs,
> same goes with guestfish. I found interesting that you can run
> guestfish, add a disk but you can't launch it.
> Unless you set LIBGUESTFS_DEBUG or TRACE flag then it hangs immediately :)
>
> Do we want to have it recursive or investigate more for exact races
> and have fine grained locking?
> Ideas?
This is expected, and is not due to a race.
Libguestfs APIs call into themselves all over the place. In order for
a non-recursive lock to work, you will have to modify the generator so
that it creates another level of functions beyond the current set:
guestfs_foo # the public API
guestfs__foo # internal API, without tracing
guestfs___foo # IIRC non-daemon function impls
Actually I forget how precisely this works now and I don't have access
to the source code to check.
Anyway once the generator is thus modified (to add a tracing but
non-locking layer of functions just below the public API and above the
"__" layer), change all recursive internal libguestfs-to-libguestfs
calls to use this new layer.
Another point that could be tidied up here: Using double (or triple)
underscores in identifiers is apparently contrary to the C++ standard.
It doesn't cause any problems at the moment, but it's not exactly
elegant and it's hard to read. I'm sure you're not keen to see
quadruple underscores in your patch either. So a better way to name
these internal levels of functions.
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine. Supports Linux and Windows.
http://people.redhat.com/~rjones/virt-df/
More information about the Libguestfs
mailing list