[Libguestfs] nbdkit worker thread shutdown

Nikolaus Rath Nikolaus at rath.org
Thu May 5 13:24:12 UTC 2022


On May 05 2022, "Richard W.M. Jones" <rjones at redhat.com> wrote:
> On Thu, May 05, 2022 at 08:59:56AM +0100, Nikolaus Rath wrote:
>> Hello,
>> 
>> When nbdkit calls a plugin's unload() method, is it guaranteed that all
>> pending requests have been handled (and all worker threads exited)?
>> 
>> (I would have expected this to be the case, but I'm getting errors from
>> threads accessing data that my unload() handler frees, so I wanted to
>> confirm my assumption).
>
> .unload is literally called just before dlclose (see
> server/backend.c:backend_unload) so if a thread in nbdkit was to
> access something in your plugin after .unload then that would be quite
> a serious bug in nbdkit.  It would be bound to crash because the code
> and data has been unloaded from the process.  This implies too that
> all connections would have been closed already.
>
> Normally the server has no view into your plugin except through the
> pointers in the plugin structure, and it shouldn't be using those
> after .unload.  Can you give us some clue as to what exactly nbdkit is
> accessing in your plugin?

It *looks like* one of the nbdkit-started worker threads is still
executing the plugin's read() handler at the time that a different
thread is executing the plugin's unload() handler (background:
https://github.com/archiecobbs/s3backer/issues/180).

However, this may not actually be the case. I wanted to confirm that
this is not expected behavior before diving into this deeply.

Now that I know that it shouldn't happen (this is what you're saying,
right?), I'll investigate in more detail and hopefully either find a
different explanation for the symptoms or provide a proper nbdkit bug
report.



Best,
Nikolaus

-- 
GPG Fingerprint: ED31 791B 2C5C 1613 AF38 8B8A D113 FCAC 3C4E 599F

             »Time flies like an arrow, fruit flies like a Banana.«



More information about the Libguestfs mailing list