Hi all,
After some digging, here's what I found out. Even though dssi~ works fine if
a plugin_lib:plugin_name is specified, anything other (including bogus
names) crashes pd-extended 0.40.3. I tried 0.95 and 0.97 dssi~ external
(latter compiled from source) and both exhibit this behavior. Closer
inspection of the dssi~ code helped me identify the call that crashes Pd:
(line 1524)
static const char* plugin_tilde_search_plugin (t_dssi_tilde *x,
const char *name)
{
char* lib_name = NULL;
void* user_data[2];
user_data[0] = (void*)(&lib_name);
user_data[1] = (void*)name;
lib_name = NULL;
LADSPAPluginSearch (dssi_tilde_search_plugin_callback,
(void*)user_data); //<--this call crashes Pd
/* The callback (allocates and) writes lib_name, if it finds the plugin
*/
return lib_name;
}
When I comment LADSPAPluginSearch, recompile, and run the Pd, then the
search for the plugin fails gracefully reporting failure to load plugin. But
as soon as the function above is enabled Pd consistently crashes with the
same error like the one I reported before:
Warning: no LADSPA_PATH and DSSI_PATH, assuming
/usr/lib/ladspa:/usr/local/lib/ladspa:/usr/lib/dssi:/usr/local/lib/dssi
no more csLADSPA plugins
socket receive error: Connection reset by peer (104)
Segmentation fault
This is running on Intrepid with the ladspa-sdk being 1.1 (latest) version.
However, upon closer inspection of the search.c in the ladspa-sdk I noticed
that there is no such LADSPAPluginSearch function that takes in two
arguments, but rather one as follows:
void
LADSPAPluginSearch(LADSPAPluginSearchCallbackFunction fCallbackFunction)
So, what gives? Am I missing something obvious? When compiled in debug mode,
dssi~ still manages to list all plugins, followed by "no more csLADSPA
plugins" and then crashes as described above. Could it be something with my
LADSPA setup?
I guess the easiest thing is to comment this call for the time being and
make the dssi~ gracefully fail unless you correctly specify a plugin. Still,
I am curious what is making this thing fail.
Best wishes,
Ico