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 5fadad1 commit 49bb156
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 // MU_MUSESAMPLER_IMUSESAMPLERTRACKS_H
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ static const std::unordered_map<mpe::ArticulationType, ms_NoteHead> NOTEHEAD_TYP
{ mpe::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 mu::musesampler {
class MuseSamplerSequencer : public audio::AbstractEventSequencer<mu::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 @@ -98,7 +98,7 @@ class MuseSamplerSequencer : public audio::AbstractEventSequencer<mu::mpe::NoteE

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 @@ -175,7 +175,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 49bb156

Please sign in to comment.