Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Crash in afp with loop and no file loaded #7265

Closed
1 task done
zonkmachine opened this issue May 18, 2024 · 2 comments · Fixed by #7266
Closed
1 task done

Crash in afp with loop and no file loaded #7265

zonkmachine opened this issue May 18, 2024 · 2 comments · Fixed by #7266
Labels

Comments

@zonkmachine
Copy link
Member

zonkmachine commented May 18, 2024

LMMS Version(s)

master after a81ad74

Bug Summary

lmms crashes when you play a note on the Audio File Processor with loop set but no file loaded.
Issue was introduced in #7100
Partially fixed in #7113

I tried moving the test from Loop::Off to the top of the for loop and that fixed the crash. I don't know what other possible issues arise from this however.

diff --git a/src/core/Sample.cpp b/src/core/Sample.cpp
index cd238b2ca..cef0f4ab1 100644
--- a/src/core/Sample.cpp
+++ b/src/core/Sample.cpp
@@ -175,10 +175,10 @@ void Sample::playRaw(sampleFrame* dst, size_t numFrames, const PlaybackState* st
 
        for (size_t i = 0; i < numFrames; ++i)
        {
+               if (index < 0 || index >= m_endFrame) { return; }
                switch (loopMode)
                {
                case Loop::Off:
-                       if (index < 0 || index >= m_endFrame) { return; }
                        break;
                case Loop::On:
                        if (index < m_loopStartFrame && backwards) { index = m_loopEndFrame - 1; }

@sakertooth @khoidauminh

Steps To Reproduce

  • Add an Audio File Processor to a project
  • Set loop play
  • Press a key

Logs

bt full

Click to expand
Thread 37 "AudioEngine::fi" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fff997fc640 (LWP 126074)]
0x00005555558d51af in lmms::Sample::playRaw (this=0x7fffdc003ec0, dst=0x7fff40005830, numFrames=207, state=0x7fff40004610, loopMode=lmms::Sample::Loop::On) at /home/zonkmachine/builds/lmms/src/core/Sample.cpp:204
204			dst[i] = m_buffer->data()[m_reversed ? m_buffer->size() - index - 1 : index];
(gdb) bt full
#0  0x00005555558d51af in lmms::Sample::playRaw(std::array*, unsigned long, lmms::Sample::PlaybackState const*, lmms::Sample::Loop) const
    (this=0x7fffdc003ec0, dst=0x7fff40005830, numFrames=207, state=0x7fff40004610, loopMode=lmms::Sample::Loop::On) at /home/zonkmachine/builds/lmms/src/core/Sample.cpp:204
        i = 0
        index = 0
        backwards = false
#1  0x00005555558d4bc7 in lmms::Sample::play(std::array*, lmms::Sample::PlaybackState*, unsigned long, float, lmms::Sample::Loop) const
    (this=0x7fffdc003ec0, dst=0x555558ee4c10, state=0x7fff40004610, numFrames=256, desiredFrequency=349.228241, loopMode=lmms::Sample::Loop::On) at /home/zonkmachine/builds/lmms/src/core/Sample.cpp:136
        __PRETTY_FUNCTION__ = "bool lmms::Sample::play(lmms::sampleFrame*, lmms::Sample::PlaybackState*, size_t, float, lmms::Sample::Loop) const"
        pastBounds = true
        outputSampleRate = 55562.5156
        inputSampleRate = 44100
        resampleRatio = 1.25992095
        marginSize = 4
                  playBuffer = std::vector of length 207, capacity 207 = {{_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}, {_M_elems = {0, 0}}...}
    resampleResult = {error = 0, inputFramesUsed = 0, outputFramesGenerated = 0}
    outputFrames = 0

#2 0x00007fffc41177f3 in lmms::AudioFileProcessor::playNote(lmms::NotePlayHandle*, std::array<float, 2ul>) (this=0x7fffdc003e50, _n=0x5555563def48, _working_buffer=0x555558ee4c10)
at /home/zonkmachine/builds/lmms/plugins/AudioFileProcessor/AudioFileProcessor.cpp:158
frames = 256
offset = 0
#3 0x0000555555a9895c in lmms::InstrumentTrack::playNote(lmms::NotePlayHandle
, std::array<float, 2ul>) (this=0x555558c9eba0, n=0x5555563def48, workingBuffer=0x555558ee4c10)
at /home/zonkmachine/builds/lmms/src/tracks/InstrumentTrack.cpp:584
#4 0x00005555558aefc0 in lmms::NotePlayHandle::play(std::array<float, 2ul>
) (this=0x5555563def48, _working_buffer=0x555558ee4c10) at /home/zonkmachine/builds/lmms/src/core/NotePlayHandle.cpp:263
framesThisPeriod = 256

Please search the issue tracker for existing bug reports before submitting your own.

  • I have searched all existing issues and confirmed that this is not a duplicate.
@khoidauminh
Copy link
Contributor

khoidauminh commented May 18, 2024

LMMS no longer crashes but the play back sound is distorted.

My current solution is to add this at the start of the function instead:

if (m_buffer->size() < 1) return;

@zonkmachine
Copy link
Member Author

Yeah, that looks better. Pull it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants