[PD-dev] defining PDINSTANCE and PDTHREADS in libpd
Miller Puckette
msp at ucsd.edu
Mon Apr 17 20:46:41 CEST 2017
I'm not sure whether dynamic class loading is thread-safe - it won't cause
crashes (I think) because class_new(), etc., have a global lock. There would
in the end be two "classes" one of which would alias the other's name. But
there might be unwanted side effects here that I haven't smoothed out yet.
In working on libpd today I've noticed two other thread-unsafe situations:
dollar zero and search path manipulations, which I need to make
per-Pd-instance.
as to (2)... I believe legacy externals will have to be recompiled if they
use symbols like "s_float" - or, later, whatever other static external
variables I end up making per-instance. In this case they'll fail to load
into multi-instance environments. (They'll still load into Pd vanilla since
I compile that with PDINSTANCE undefined). So I believe we'll have binary
compatibilty for Pd vanilla, and for most externs when loaded into libpd, but
some others will refuse to load and have to be massaged as in
&s_float ..> gensym("float")
But who knows what other horrible problems will come up. I don't expect
this to be an easy process... but I think it will be worth it in the end...
cheers
Miller
On Mon, Apr 17, 2017 at 06:32:31PM +0000, Jonathan Wilkes wrote:
> 1. If thread #1 loads [foo] from foo.pd_linux, and thread #2 loads [foo] from foo.pd_linux, what happens?
> 2. Will there be any public interfaces external developers can use to keep from making their own ad-hoc, buggy revisions to legacy externals?
>
> -Jonathan
More information about the Pd-dev
mailing list