[LV2] Is state:threadSafeRestore default ?
Sven Jaehnichen
sjaehn at jahnichen.de
Tue Dec 8 22:20:53 PST 2020
... just seen that the github version (in contrast to the LV2 book
version) of eg-sampler is explicitly defined as (and programmed) tread safe.
Sven
Am 08.12.20 um 22:06 schrieb Sven Jaehnichen:
> Hi,
>
> I'm confused about a bug I observed in the DSP of some of my plugins.
> To be more precise: all my plugins with a sample file chooser
> (B.Jumblr, B.Harvestr, and B.Oops) and only if a state is loaded
> (e.g., by loading a preset) during playback. Hosts are jalv or ardour.
>
> These plugins free old samples and instantiate new samples in the same
> way as eg-sampler from the LV2 book. state:threadSafeRestore is NOT
> explicitly supported by the plugin. Thus, I expected that audio
> processing (run()) is interrupted by the host during state::restore().
> (see http://lv2plug.in/ns/ext/state#threadSafeRestore ).
>
> However, if I unload a sample (delete sample; sample = nullptr;) in
> the restore() function, I may get a nullptr deref crash on access to
> *sample in run() although checked for if (sample) just before:
>
> https://github.com/sjaehn/BOops/blob/f6e5e1ef6259978961cd76b4c237ec44a137322f/src/BOops.cpp#L1057
>
>
> For me it looks like a race condition that shouldn't occur. I thought
> only if state:threadSafeRestore is supported, then state::restore()
> may run in parallel to run(). And if not supported, restore() is
> executed after run(). Isn't it? Did I oversee sth.?
>
> OK, i can also make my restore() function thread safe. Not that
> problem. But what about eg-sampler? Did somebody observe similar
> problems there?
>
> Thanks in advance
> Sven
>
> _______________________________________________
> Devel mailing list
> Devel at lists.lv2plug.in
> http://lists.lv2plug.in/listinfo.cgi/devel-lv2plug.in
More information about the Devel
mailing list