On Tue, Jan 16, 2018 at 09:37:09AM -0600, Eric Blake wrote:
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.
I think we're OK, if only because the second patch drops this
assertion completely.
Rich.
--
Richard Jones, Virtualization Group, Red Hat
http://people.redhat.com/~rjones
Read my programming and virtualization blog:
http://rwmj.wordpress.com
libguestfs lets you edit virtual machines. Supports shell scripting,
bindings from many languages.
http://libguestfs.org