LMMS / LMMS/lmms

Segfault when deleting a clip in the song editor while playing

Open
#6,935 1 comment 0 reactions 0 assignees View on GitHub
bug
Dominant language
C++
Stars
10.4k
Forks
1.3k
Avg merge
2d 13h
Merged PRs (30d)
7

Description

That’s may be the segfault I encountered the most since I use/test LMMS’s main branch (since about 8 or 10 years, at least): a segfault which occurs when deleting a clip in the song editor. It mostly happens while playing but it’s triggered when not playing in some very rare cases.

I don’t know if an issue has been already open for this (so many segfaults, hard to search for a particular one ! ^^) so this one issue. Feel free to close if duplicated.

This bug’sbeen here for years, it is the reason why I got use to Ctrl+s after nearly every actions I make in LMMS.
I told myself: do not fucking delete clipŝ while playing, but well, I can’t resist to do so from time to time… It works most of the time! Maybe this backtrace will help :

```
#0 0x00007ffff60a794d in __dynamic_cast () at /lib/x86_64-linux-gnu/libstdc++.so.6
#1 0x0000555555897f98 in lmms::TrackContainer::automatedValuesFromTracks(std::vector > const&, lmms::TimePos, int) (tracks=std::vector of length 53, capacity 53 = {...}, time=..., clipNum=-1)
at /usr/local/src/lmms/src/core/TrackContainer.cpp:295
p = 0x0
clip = 0x7ffeec1c1d60
__for_range = std::vector of length 604, capacity 1024 = {0x7fff3b421700, 0x7fff3b421980, 0x7fff3b421c00, 0x7fff3b421e80, 0x7ffff29f1700, 0x7ffff29f1480, 0x7ffff29f1200, 0x7ffff29f0080, 0x7ffff29f0300, 0x7ffff29f0580, 0x7fff3b132bd0, 0x7ffeec97b700, 0x7ffeec97b980, 0x7ffeec97bc00, 0x7ffeec97be80, 0x7ffeec9a1980, 0x7ffeec9a1c00, 0x7ffeec9a1e80, 0x7ffeec9a2100, 0x7ffeec1b6200, 0x7ffeec1b6480, 0x7ffeec1b6700, 0x7ffeec1b6e80, 0x7ffeec1bd780, 0x7ffeec1bdf00, 0x7ffeec1be180, 0x7ffeec1be400, 0x7ffeec1be680, 0x7ffeec1bee00, 0x7ffeec1bf080, 0x7ffeec1d5720, 0x7ffeec1d5930, 0x7ffeec1c7820, 0x7ffeec1d50f0, 0x7ffeec1d5300, 0x7ffeec1d5510, 0x7ffeec1beb80, 0x7fff3b135300, 0x7ffeec97c100, 0x7fff3b121d60, 0x7ffeec1cf3e0, 0x7fff3b135510, 0x7fff3b121f70, 0x7ffeec9b7820, 0x7ffeec9ac600, 0x7ffeec1b2b00, 0x7ffeec1b4b80, 0x7ffeec1cf5f0, 0x7fff3b135720, 0x7fff3b1229c0, 0x7ffeec1cf800, 0x7fff3b135930, 0x7fff3b122bd0, 0x7fff3b13fa10, 0x7fff3b122180, 0x7fff3b12be40, 0x7ffeec9a2380, 0x7ffeec9a2880, 0x7ffeec9a2d80, 0x7ffeec9a3280, 0x7ffeec1c7c40, 0x7ffeec1b7380, 0x7ffeec1cfa10, 0x7fff3b13dd30, 0x7ffeec97c380, 0x7fff3b12c050, 0x7fff3b131d60, 0x7fff3b135b40, 0x7ffeec9a1480, 0x7fff3b122390, 0x7ffeec9b7a30, 0x7ffeec9ac880, 0x7ffeec1b2d80, 0x7ffeec1b4e00, 0x7ffeec1cfc20, 0x7fff3b135d50, 0x7fff3b12c260, 0x7fff3b1225a0, 0x7ffeec1c7e50, 0x7fff3b12c470, 0x7ffeec9a8f00, 0x7ffeec9bd700, 0x7fff3b135f60, 0x7ffeec1d0080, 0x7ffeec9a1700, 0x7fff3b1227b0, 0x7fff3b12c680, 0x7fff3b13e780, 0x7fff3b13df40, 0x7fff3b12c890, 0x7ffeec9a3500, 0x7ffeec9b4ac0, 0x7ffeec9aa080, 0x7ffeec1b0580, 0x7ffeec1b5080, 0x7ffeec9bd910, 0x7ffeec1bb700, 0x7fff3b1306b0, 0x7fff3b136170, 0x7ffeec97c600, 0x7fff3b122de0, 0x7ffeec9be570, 0x7ffeec1b6c00, 0x7ffeec1c9920, 0x7ffeec1bb980, 0x7ffeec1d0290, 0x7ffeec97c880, 0x7ffeec9bdb20, 0x7ffeec1b6980, 0x7ffeec1b3f00, 0x7fff3b136380, 0x7ffeec97cb00, 0x7fff3b122ff0, 0x7fff3b12caa0, 0x7ffeec1b7600, 0x7fff3b120290, 0x7ffeec9a3780, 0x7ffeec1d04a0, 0x7ffeec9a3a00, 0x7fff3b1308c0, 0x7fff3b136590, 0x7ffeec97cd80, 0x7fff3b123200, 0x7fff3b12ccb0, 0x7ffeec9a3c80, 0x7ffeec9bc680, 0x7ffeec9be780, 0x7ffeec1cabb0, 0x7ffeec1b9400, 0x7ffeec9b4ee0, 0x7ffeec9aa580, 0x7ffeec1b0a80, 0x7fff3b12cec0, 0x7ffeec9af580, 0x7ffeec1d06b0, 0x7fff3b123410, 0x7fff3b1367a0, 0x7ffeec9be990, 0x7fff3b13fc20, 0x7fff3b12d0d0, 0x7ffeec1b4180, 0x7ffeec9bc890, 0x7ffeec1bbc00, 0x7fff3b130ad0, 0x7fff3b1369b0, 0x7fff3b120080, 0x7ffeec97d000, 0x7fff3b123620, 0x7fff3b12d2e0, 0x7ffeec9a3f00, 0x7ffeec9beba0, 0x7ffeec1d08c0, 0x7ffeec1b4400, 0x7fff3b123830, 0x7fff3b12d4f0, 0x7fff3b136bc0, 0x7ffeec9b5720, 0x7ffeec9af800, 0x7ffeec1b4680, 0x7ffeec9bedb0, 0x7ffeec9bcaa0, 0x7ffeec1d0ad0, 0x7ffeec9bccb0, 0x7fff3b123a40, 0x7fff3b12d700, 0x7ffeec9a4180, 0x7ffeec9b5930, 0x7ffeec9aaa80, 0x7ffeec1b0f80, 0x7fff3b133830, 0x7fff3b136dd0, 0x7fff3b12d910, 0x7ffeec9befc0, 0x7fff3b123c50, 0x7ffeec9bcec0, 0x7ffeec1d0ce0, 0x7fff3b13e990, 0x7ffeec9b4490, 0x7ffeec9a9900, 0x7ffeec9afd00, 0x7ffeec1b5300, 0x7fff3b136fe0, 0x7fff3b123e60, 0x7ffeec9bf1d0, 0x7ffeec9a4400, 0x7ffeec9b8690--Type for more, q to quit, c to co--Type for more, q to quit, c to continue without paging--
12db20, 0x7ffeec1d0ef0, 0x7ffeec9bf3e0, 0x7fff3b131f70, 0x7fff3b132de0, 0x7fff3b124280, 0x7fff3b12dd30, 0x7fff3b137400...}
__for_begin = 0x7ffeec1c1d60
__for_end = 0x7fff3b121310
clips = std::vector of length 604, capacity 1024 = {0x7fff3b421700, 0x7fff3b421980, 0x7fff3b421c00, 0x7fff3b421e80, 0x7ffff29f1700, 0x7ffff29f1480, 0x7ffff29f1200, 0x7ffff29f0080, 0x7ffff29f0300, 0x7ffff29f0580, 0x7fff3b132bd0, 0x7ffeec97b700, 0x7ffeec97b980, 0x7ffeec97bc00, 0x7ffeec97be80, 0x7ffeec9a1980, 0x7ffeec9a1c00, 0x7ffeec9a1e80, 0x7ffeec9a2100, 0x7ffeec1b6200, 0x7ffeec1b6480, 0x7ffeec1b6700, 0x7ffeec1b6e80, 0x7ffeec1bd780, 0x7ffeec1bdf00, 0x7ffeec1be180, 0x7ffeec1be400, 0x7ffeec1be680, 0x7ffeec1bee00, 0x7ffeec1bf080, 0x7ffeec1d5720, 0x7ffeec1d5930, 0x7ffeec1c7820, 0x7ffeec1d50f0, 0x7ffeec1d5300, 0x7ffeec1d5510, 0x7ffeec1beb80, 0x7fff3b135300, 0x7ffeec97c100, 0x7fff3b121d60, 0x7ffeec1cf3e0, 0x7fff3b135510, 0x7fff3b121f70, 0x7ffeec9b7820, 0x7ffeec9ac600, 0x7ffeec1b2b00, 0x7ffeec1b4b80, 0x7ffeec1cf5f0, 0x7fff3b135720, 0x7fff3b1229c0, 0x7ffeec1cf800, 0x7fff3b135930, 0x7fff3b122bd0, 0x7fff3b13fa10, 0x7fff3b122180, 0x7fff3b12be40, 0x7ffeec9a2380, 0x7ffeec9a2880, 0x7ffeec9a2d80, 0x7ffeec9a3280, 0x7ffeec1c7c40, 0x7ffeec1b7380, 0x7ffeec1cfa10, 0x7fff3b13dd30, 0x7ffeec97c380, 0x7fff3b12c050, 0x7fff3b131d60, 0x7fff3b135b40, 0x7ffeec9a1480, 0x7fff3b122390, 0x7ffeec9b7a30, 0x7ffeec9ac880, 0x7ffeec1b2d80, 0x7ffeec1b4e00, 0x7ffeec1cfc20, 0x7fff3b135d50, 0x7fff3b12c260, 0x7fff3b1225a0, 0x7ffeec1c7e50, 0x7fff3b12c470, 0x7ffeec9a8f00, 0x7ffeec9bd700, 0x7fff3b135f60, 0x7ffeec1d0080, 0x7ffeec9a1700, 0x7fff3b1227b0, 0x7fff3b12c680, 0x7fff3b13e780, 0x7fff3b13df40, 0x7fff3b12c890, 0x7ffeec9a3500, 0x7ffeec9b4ac0, 0x7ffeec9aa080, 0x7ffeec1b0580, 0x7ffeec1b5080, 0x7ffeec9bd910, 0x7ffeec1bb700, 0x7fff3b1306b0, 0x7fff3b136170, 0x7ffeec97c600, 0x7fff3b122de0, 0x7ffeec9be570, 0x7ffeec1b6c00, 0x7ffeec1c9920, 0x7ffeec1bb980, 0x7ffeec1d0290, 0x7ffeec97c880, 0x7ffeec9bdb20, 0x7ffeec1b6980, 0x7ffeec1b3f00, 0x7fff3b136380, 0x7ffeec97cb00, 0x7fff3b122ff0, 0x7fff3b12caa0, 0x7ffeec1b7600, 0x7fff3b120290, 0x7ffeec9a3780, 0x7ffeec1d04a0, 0x7ffeec9a3a00, 0x7fff3b1308c0, 0x7fff3b136590, 0x7ffeec97cd80, 0x7fff3b123200, 0x7fff3b12ccb0, 0x7ffeec9a3c80, 0x7ffeec9bc680, 0x7ffeec9be780, 0x7ffeec1cabb0, 0x7ffeec1b9400, 0x7ffeec9b4ee0, 0x7ffeec9aa580, 0x7ffeec1b0a80, 0x7fff3b12cec0, 0x7ffeec9af580, 0x7ffeec1d06b0, 0x7fff3b123410, 0x7fff3b1367a0, 0x7ffeec9be990, 0x7fff3b13fc20, 0x7fff3b12d0d0, 0x7ffeec1b4180, 0x7ffeec9bc890, 0x7ffeec1bbc00, 0x7fff3b130ad0, 0x7fff3b1369b0, 0x7fff3b120080, 0x7ffeec97d000, 0x7fff3b123620, 0x7fff3b12d2e0, 0x7ffeec9a3f00, 0x7ffeec9beba0, 0x7ffeec1d08c0, 0x7ffeec1b4400, 0x7fff3b123830, 0x7fff3b12d4f0, 0x7fff3b136bc0, 0x7ffeec9b5720, 0x7ffeec9af800, 0x7ffeec1b4680, 0x7ffeec9bedb0, 0x7ffeec9bcaa0, 0x7ffeec1d0ad0, 0x7ffeec9bccb0, 0x7fff3b123a40, 0x7fff3b12d700, 0x7ffeec9a4180, 0x7ffeec9b5930, 0x7ffeec9aaa80, 0x7ffeec1b0f80, 0x7fff3b133830, 0x7fff3b136dd0, 0x7fff3b12d910, 0x7ffeec9befc0, 0x7fff3b123c50, 0x7ffeec9bcec0, 0x7ffeec1d0ce0, 0x7fff3b13e990, 0x7ffeec9b4490, 0x7ffeec9a9900, 0x7ffeec9afd00, 0x7ffeec1b5300, 0x7fff3b136fe0, 0x7fff3b123e60, 0x7ffeec9bf1d0, 0x7ffeec9a4400, 0x7ffeec9b8690, 0x7ffeec1c8060, 0x7ffeec1b7880, 0x7fff3b1371f0, 0x7fff3b1204a0, 0x7ffeec97d280, 0x7fff3b124070, 0x7fff3b12db20, 0x7ffeec1d0ef0, 0x7ffeec9bf3e0, 0x7fff3b131f70, 0x7fff3b132de0, 0x7fff3b124280, 0x7fff3b12dd30, 0x7fff3b137400...}
valueMap = {d = 0x7fff44025a60}
#2 0x00005555558888be in lmms::Song::automatedValuesAt(lmms::TimePos, int) const (this=0x5555569715b0, time=..., clipNum=-1) at /usr/local/src/lmms/src/core/Song.cpp:845
trackList = std::vector of length 53, capacity 53 = {0x7ffff2970080, 0x7ffff2a3df40, 0x7ffeec992240, 0x7ffeec992480, 0x7ffff29702b0, 0x7ffff29704e0, 0x7ffeec9926c0, 0x7ffeec992900, 0x7ffff2970710, 0x7ffff2970940, 0x7ffff2970b70, 0x7ffeec992b40, 0x7ffeec992d80, 0x7ffeec992fc0, 0x7ffff2970da0, 0x7ffff2970fd0, 0x7ffeec993200, 0x7ffff2971200, 0x7ffff2971430, 0x7ffff2971660, 0x7ffeec993440, 0x7ffff2971890, 0x7ffff2971ac0, 0x7ffff2971cf0, 0x7ffff2971f20, 0x7ffeec993680, 0x7ffeec9938c0, 0x7ffff2972150, 0x7ffff2972380, 0x7ffff29725b0, 0x7ffeec993b00, 0x7ffff29727e0, 0x7ffff2972a10, 0x7ffff2972c40, 0x7ffeec993d40, 0x7ffff2972e70, 0x7ffff29730a0, 0x7ffeec993f80, 0x7ffeec9941c0, 0x7ffeec994400, 0x7ffff29732d0, 0x7ffff2973500, 0x7ffeec994640, 0x7ffeec994880, 0x7ffff2973730, 0x7ffeec994ac0, 0x7ffff2973960, 0x7ffff2973b90, 0x7ffff2973dc0, 0x7ffff2973ff0, 0x7ffff2974220, 0x7ffff2974450, 0x7ffff2974680}
#3 0x0000555555886f28 in lmms::Song::processAutomations(std::vector > const&, lmms::TimePos, short)
(this=0x5555569715b0, tracklist=std::vector of length 52, capacity 52 = {...}, timeStart=...) at /usr/local/src/lmms/src/core/Song.cpp:385
values = {d = 0x7ffff6798660 }
recordedModels = {q_hash = {{d = 0x7ffff67985a0 , e = 0x7ffff67985a0 }}}
container = 0x5555569715b0
clipNum = -1
tracks =
clips = Python Exception : Cannot access memory at address 0x51bfdb80
#4 0x0000555555886b61 in lmms::Song::processNextBuffer() (this=0x5555569715b0) at /usr/local/src/lmms/src/core/Song.cpp:341
frameOffsetInTick = 0.25
framesUntilNextPeriod = 87
framesUntilNextTick = 394
framesToPlay = 87
trackList = std::vector of length 52, capacity 52 = {0x7ffff2a3df40, 0x7ffeec992240, 0x7ffeec992480, 0x7ffff29702b0, 0x7ffff29704e0, 0x7ffeec9926c0, 0x7ffeec992900, 0x7ffff2970710, 0x7ffff2970940, 0x7ffff2970b70, 0x7ffeec992b40, 0x7ffeec992d80, 0x7ffeec992fc0, 0x7ffff2970da0, 0x7ffff2970fd0, 0x7ffeec993200, 0x7ffff2971200, 0x7ffff2971430, 0x7ffff2971660, 0x7ffeec993440, 0x7ffff2971890, 0x7ffff2971ac0, 0x7ffff2971cf0, 0x7ffff2971f20, 0x7ffeec993680, 0x7ffeec9938c0, 0x7ffff2972150, 0x7ffff2972380, 0x7ffff29725b0, 0x7ffeec993b00, 0x7ffff29727e0, 0x7ffff2972a10, 0x7ffff2972c40, 0x7ffeec993d40, 0x7ffff2972e70, 0x7ffff29730a0, 0x7ffeec993f80, 0x7ffeec9941c0, 0x7ffeec994400, 0x7ffff29732d0, 0x7ffff2973500, 0x7ffeec994640, 0x7ffeec994880, 0x7ffff2973730, 0x7ffeec994ac0, 0x7ffff2973960, 0x7ffff2973b90, 0x7ffff2973dc0, 0x7ffff2973ff0, 0x7ffff2974220, 0x7ffff2974450, 0x7ffff2974680}
clipNum = -1
enforceLoop = {__this = 0x5555569715b0}
timeline = 0x55555d0afea0
loopEnabled = true
framesPerTick = 393.75
framesPerPeriod = 128
frameOffsetInPeriod = 41
#5 0x00005555557d17c9 in lmms::AudioEngine::renderStageNoteSetup() (this=0x555556948700) at /usr/local/src/lmms/src/core/AudioEngine.cpp:380
profilerProbe = {m_profiler = @0x555556948800, m_type = lmms::AudioEngineProfiler::DetailType::NoteSetup}
it_rem = {i = 0x7fff4403f0c0}
mixer = 0x555556992550
#6 0x00005555557d1c0a in lmms::AudioEngine::renderNextBuffer() (this=0x555556948700) at /usr/local/src/lmms/src/core/AudioEngine.cpp:465
#7 0x00005555557d3e91 in lmms::AudioEngine::fifoWriter::run() (this=0x55555c3dd7b0) at /usr/local/src/lmms/src/core/AudioEngine.cpp:1298
buffer = 0x7fff44042190
b = 0x5555569e24c0
frames = 128
#8 0x00007ffff64cbd43 in () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#9 0x00007ffff5ea8044 in start_thread (arg=) at ./nptl/pthread_create.c:442
ret =
--Type for more, q to quit, c to continue without paging--
pd =
unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140734564918976, -3138150934858113094, -288, 11, 140737488343984, 140734556528640, 3138357094314991546, 3138137633293262778}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
not_first_call =
#10 0x00007ffff5f2861c in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81
```

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with src/core/TrackContainer.cpp:295 and trace the callers in src/core/Song.cpp at lines 845, 385, and 341, using the supplied backtrace as the entry point. Reproduce deletion of a song-editor clip during playback and determine what change prevents the segfault without breaking automation processing; completion means the action no longer crashes during playback.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
audio-video-rtc, desktop
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.