From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Honeywell Subject: LADSPA plugin segfault patch Date: Fri, 13 Jun 2003 14:52:10 -0700 Sender: alsa-devel-admin@lists.sourceforge.net Message-ID: <3EEA478A.8020606@pianodisc.com> Reply-To: davidh@pianodisc.com Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Return-path: Errors-To: alsa-devel-admin@lists.sourceforge.net List-Help: List-Post: List-Subscribe: , List-Unsubscribe: , List-Archive: To: alsa-devel@lists.sourceforge.net List-Id: alsa-devel@alsa-project.org I have been experimenting with LADSPA plugins available from http://plugin.org.uk/ and other sources. I found that many of the plugins caused a segfault during pcm playback, while some did not. I traced the problem to LADSPA plugins which do not have an activate() function. Apparently this function can be present, or set to NULL. I found that whenever activate() or deactivate() are called in pcm_ladspa.c, a sanity check is performed before calling the function. EXCEPT in one instance. When I added the sanity check to that instance, the segfaults disappeared and all of the plugins that I tried worked. Here is a patch for alsa-lib/src/pcm/pcm_ladspa.c: --- pcm_ladspa.orig 2003-06-13 13:34:58.000000000 -0700 +++ pcm_ladspa.c 2003-06-13 13:32:02.000000000 -0700 @@ -412,7 +412,8 @@ return -EINVAL; } list_add_tail(&instance->list, &plugin->instances); - plugin->desc->activate(instance->handle); + if (plugin->desc->activate) + plugin->desc->activate(instance->handle); if (plugin->policy == SND_PCM_LADSPA_POLICY_DUPLICATE) { err = snd_pcm_ladspa_connect_plugin_duplicate(plugin, &plugin->input, instance, idx); if (err < 0) { For anyone that's interested, my asound.conf looks like this: pcm.pitch { type ladspa slave.pcm "plughw:0,0" path "/usr/local/lib/ladspa" plugins [ { label amPitchshift input { controls [ 1.059463 3 ] } } ] } There's one other problem that I haven't been able to solve yet. When I use the latest ALSA library, I get error messages that complain about the version whenever I try to play pcm through the plugin: ALSA lib dlmisc.c:107:(snd_dlsym_verify) unable to verify version for symbol ladspa_descriptor Compiling --with-versioned= yes or no makes no difference in this case. The only way I have been able to get around this problem is to use an old ALSA library (I'm currently using 0.9.0rc6). I have tried many versions of the library. The problem seems to have started with CVS version 1.11 of pcm_ladspa.c. Version 1.10 uses dlopen(), dlclose(), and dlsym(), while version 1.11 uses snd_dlopen(), snd_dlclose(), and snd_dlsym(). This appears to be the only difference between the two versions. Any help on this issue would be greatly appreciated, as I'd like to use the most up-to-date library. ------------------------------------------------------- This SF.NET email is sponsored by: eBay Great deals on office technology -- on eBay now! Click here: http://adfarm.mediaplex.com/ad/ck/711-11697-6916-5