Skip to content

Commit

Permalink
fix musescore#23112: don't call shared_from_this() in MuseSamplerWrapper
Browse files Browse the repository at this point in the history
Because it locks the pointer, EventAudioSource loses ownership of it and can no longer destroy it
  • Loading branch information
RomanPudashkin committed Jun 10, 2024
1 parent 424f2a3 commit f9f3bb1
Show file tree
Hide file tree
Showing 4 changed files with 4 additions and 6 deletions.
2 changes: 0 additions & 2 deletions src/framework/musesampler/internal/imusesamplertracks.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,6 @@ class IMuseSamplerTracks
virtual const TrackList& allTracks() const = 0;
virtual ms_Track addTrack() = 0;
};

using IMuseSamplerTracksPtr = std::shared_ptr<IMuseSamplerTracks>;
}

#endif // MUSE_MUSESAMPLER_IMUSESAMPLERTRACKS_H
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ static const std::unordered_map<ArticulationType, ms_NoteHead> NOTEHEAD_TYPES =
{ ArticulationType::SlashedForwardsNote, ms_NoteHead_SlashLeftFilled },
};

void MuseSamplerSequencer::init(MuseSamplerLibHandlerPtr samplerLib, ms_MuseSampler sampler, IMuseSamplerTracksPtr tracks,
void MuseSamplerSequencer::init(MuseSamplerLibHandlerPtr samplerLib, ms_MuseSampler sampler, IMuseSamplerTracks* tracks,
std::string&& defaultPresetCode)
{
m_samplerLib = samplerLib;
Expand Down
4 changes: 2 additions & 2 deletions src/framework/musesampler/internal/musesamplersequencer.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ namespace muse::musesampler {
class MuseSamplerSequencer : public muse::audio::AbstractEventSequencer<mpe::NoteEvent, AuditionStartNoteEvent, AuditionStopNoteEvent>
{
public:
void init(MuseSamplerLibHandlerPtr samplerLib, ms_MuseSampler sampler, IMuseSamplerTracksPtr tracks, std::string&& defaultPresetCode);
void init(MuseSamplerLibHandlerPtr samplerLib, ms_MuseSampler sampler, IMuseSamplerTracks* tracks, std::string&& defaultPresetCode);

void updateOffStreamEvents(const mpe::PlaybackEventsMap& events, const mpe::PlaybackParamMap& params) override;
void updateMainStreamEvents(const mpe::PlaybackEventsMap& events, const mpe::DynamicLevelMap& dynamics,
Expand Down Expand Up @@ -99,7 +99,7 @@ class MuseSamplerSequencer : public muse::audio::AbstractEventSequencer<mpe::Not

MuseSamplerLibHandlerPtr m_samplerLib = nullptr;
ms_MuseSampler m_sampler = nullptr;
IMuseSamplerTracksPtr m_tracks = nullptr;
IMuseSamplerTracks* m_tracks = nullptr;

using layer_idx_t = size_t;
std::unordered_map<layer_idx_t, track_idx_t> m_layerIdxToTrackIdx;
Expand Down
2 changes: 1 addition & 1 deletion src/framework/musesampler/internal/musesamplerwrapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ void MuseSamplerWrapper::setupSound(const mpe::PlaybackSetupData& setupData)
}
}

m_sequencer.init(m_samplerLib, m_sampler, shared_from_this(), resolveDefaultPresetCode(m_instrument));
m_sequencer.init(m_samplerLib, m_sampler, this, resolveDefaultPresetCode(m_instrument));
}

void MuseSamplerWrapper::setupEvents(const mpe::PlaybackData& playbackData)
Expand Down

0 comments on commit f9f3bb1

Please sign in to comment.