[Libguestfs] [PATCH nbdkit 1/3] plugins: Move locking to a new file.

Eric Blake eblake at redhat.com
Tue Jan 16 15:37:09 UTC 2018


On 01/16/2018 08:11 AM, Richard W.M. Jones wrote:
> Mostly code motion.
> ---
>  src/Makefile.am   |   1 +
>  src/connections.c |  14 +++----
>  src/internal.h    |  14 ++++---
>  src/locks.c       | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  src/plugins.c     |  77 +++++-------------------------------
>  5 files changed, 142 insertions(+), 79 deletions(-)
> 

> +++ b/src/locks.c

> +void
> +lock_connection (void)
> +{
> +  int thread_model = plugin_thread_model ();
> +
> +  if (thread_model <= NBDKIT_THREAD_MODEL_SERIALIZE_CONNECTIONS) {

> +++ b/src/plugins.c

> +int
> +plugin_thread_model (void)
> +{
> +  assert (dl);
> +
> +  return plugin._thread_model;
> +}

The new code asserts dl prior to locking the connection;

> +
>  const char *
>  plugin_name (void)
>  {
> @@ -312,67 +316,6 @@ plugin_config_complete (void)
>      exit (EXIT_FAILURE);
>  }
>  
> -/* Handle the thread model. */
> -void
> -plugin_lock_connection (void)
> -{
> -  if (plugin._thread_model <= NBDKIT_THREAD_MODEL_SERIALIZE_CONNECTIONS) {
> -    debug ("%s: acquire connection lock", filename);
> -    pthread_mutex_lock (&connection_lock);
> -  }
> -}

but the old code did not (and just blindly assumed that _thread_model is
always valid).  Can that new assertion ever fire during racy unload
sequences?

Otherwise, looks right to me.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 619 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libguestfs/attachments/20180116/d459e4bd/attachment.sig>


More information about the Libguestfs mailing list