On Thu, 5 May 2022, at 12:04, Laszlo Ersek wrote:
On 05/05/22 09:59, 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).
From <
https://libguestfs.org/nbdkit-plugin.3.html>:
.cleanup
is called once after all connections have been closed, prior to
unloading the plugin from memory. This is only called if .after_fork
succeeded earlier (even in cases where nbdkit did not fork but is
running in the foreground), which makes it a good place to
gracefully end any background threads.
So I would think you need to either join all threads in .cleanup (at the
latest), waiting for them to drain any pending work, or cancel them
(with appropriate cancellation handlers in the background threads).
I am taking about the threads started by nbdkit itself. I don't think the plug-in is
in a position to join those in the handler - or is it?
Best,
Nikolaus
--
GPG Fingerprint: ED31 791B 2C5C 1613 AF38 8B8A D113 FCAC 3C4E 599F
»Time flies like an arrow, fruit flies like a Banana.«