13
0

Mixer Scenes: fix code thinkos for sparsely-populated vector of scenes

* don't create a new MixerScene if one already exists
* only resize the vector when necessary
* adding a new scene at position N should not shrink the vector size
This commit is contained in:
Ben Loftis 2022-06-01 08:47:06 -05:00
parent b3e4f243b0
commit 00bd313e6e

View File

@ -7525,10 +7525,12 @@ boost::shared_ptr<MixerScene>
Session::nth_mixer_scene (size_t nth, bool create_if_missing) Session::nth_mixer_scene (size_t nth, bool create_if_missing)
{ {
Glib::Threads::RWLock::ReaderLock lm (_mixer_scenes_lock); Glib::Threads::RWLock::ReaderLock lm (_mixer_scenes_lock);
if (create_if_missing && _mixer_scenes.size () <= nth) { if (create_if_missing && (!_mixer_scenes[nth] || _mixer_scenes.size() <= nth) ) {
lm.release (); lm.release ();
Glib::Threads::RWLock::WriterLock lw (_mixer_scenes_lock); Glib::Threads::RWLock::WriterLock lw (_mixer_scenes_lock);
_mixer_scenes.resize (nth + 1); if (_mixer_scenes.size() <= nth) {
_mixer_scenes.resize (nth + 1);
}
_mixer_scenes[nth] = boost::shared_ptr<MixerScene> (new MixerScene (*this)); _mixer_scenes[nth] = boost::shared_ptr<MixerScene> (new MixerScene (*this));
return _mixer_scenes[nth]; return _mixer_scenes[nth];
} }