|
From: | josh |
Subject: | [fluid-dev] Revert program change return event stuff |
Date: | Thu, 26 Nov 2009 11:19:38 -0800 |
User-agent: | Internet Messaging Program (IMP) H3 (4.1.6) |
I did start thinking along the lines of making the program change lock/malloc free. Unfortunately the allocation of presets is left up to the SoundFont loader. But the internal SoundFont loaders could be modified to assign each preset a pre-allocated fluid_preset_t structure, so that it does not need to be allocated or freed during program change. In fact these structures could probably be shared for an entire SoundFont. This means that the get_preset method would be marked as a real-time sensitive method. Existing programs that use the SoundFont loader would likely need to update this method, to remain real-time safe.
I'm not sure how to resolve the need for the mutex protecting the SoundFont list though. As far as making sure the SoundFont doesn't get unloaded while the synth thread is using it, the synth thread could just hold a reference to all SoundFonts. A remove request could then be queued to the synth thread, which then queues an event back to the return queue unref'ing it, at which point it would be removed.
Any ideas how to have a lock free method of accessing the SoundFont list, when searching for a preset? A secondary shadow SoundFont list owned by the synth thread, which is synchronized via the queue, might work. Seems slightly messy though and I know how much you hate those shadow variables ;)
Maybe its not worth trying to fix now. Josh
[Prev in Thread] | Current Thread | [Next in Thread] |