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

activating hotcue loop sometimes jumps to cue instead of toggling loop #11003

Closed
ywwg opened this issue Oct 25, 2022 · 18 comments
Closed

activating hotcue loop sometimes jumps to cue instead of toggling loop #11003

ywwg opened this issue Oct 25, 2022 · 18 comments
Labels

Comments

@ywwg
Copy link
Member

ywwg commented Oct 25, 2022

Bug Description

Sometimes I'll press a hotcue button corresponding to a hotcue loop (before the playhead gets there) and instead of toggling the loop activation, the playhead will jump to the hotcue. I can't reproduce this consistently.

Version

head

OS

Ubuntu 22.04

NOTE: I have about 10 wrong theories about this bug, and even now I'm not sure I have the right root cause. So please don't read too hard.

@ywwg ywwg added the bug label Oct 25, 2022
@ywwg
Copy link
Member Author

ywwg commented Oct 25, 2022

(yes, the track is playing back in this case -- this happened to me during a live set and just now when I was practicing)

@ywwg
Copy link
Member Author

ywwg commented Oct 25, 2022

looking at my database I have some interesting entries for the track that messed up:

11926|8186|8|428|13900524|-1||16744448|2
11927|8186|2|-0.537313432832889|0|-1||16744448|2
11928|8186|6|428|0|-1||16744448|2
11929|8186|7|-1|13900952|-1||16744448|2
12036|8186|1|3475342.74626866|0|1||16744448|2
12037|8186|4|12321671.1044776|631880.597014926|3||15921919|2
12038|8186|4|12321671.1044776|631880.597014926|-1||16744448|2
12139|8186|4|315939.76119403|631880.597014925|0||15921919|2

Note that there are two hotcues at the same position, cue index 3 and index -1, and the only difference is the color. not sure if that makes a difference here or not.

oh duh, loop with index -1 is the regular saved loop

@ywwg
Copy link
Member Author

ywwg commented Oct 25, 2022

I can't find any obvious code path that would cause a seek forward to a hotcue loop. It looks like it should only happen if the cue type is wrong for some reason.

@ywwg
Copy link
Member Author

ywwg commented Oct 25, 2022

I can reproduce this but I have no idea what the hell is going on, which makes me suspect bad memory access. I put debugs/breaks wherever we seek, and no seek is called. The only thing I see in debug printing is that the call that makes the play position jump ahead, iBufferSize is double what it usually is, 470 instead of 235ish:

Debug [Engine] scale...  512 235 
Debug [Engine] FramePos(3.05929e+06) 235 FramePos(3.05952e+06)
Debug [Engine] playpos 6.11904e+06
Debug [Engine] scale...  512 470
Debug [Engine] FramePos(3.05952e+06) 470 FramePos(6.31661e+06)
Debug [Engine] playpos 1.26332e+07
Debug [Engine] scale...  512 235

when the read comes in for 470 instead of 235, we jump way ahead in the track

(update: not bad memory access)

@ywwg
Copy link
Member Author

ywwg commented Oct 25, 2022

ah, I was mistaken, ibuffersize doesn't change, it's the number of frames read

@ywwg
Copy link
Member Author

ywwg commented Oct 25, 2022

As best I can tell, the scaler needs to read more than one entry from the readahead log, and the second item in the log is from inside the new loop. So perhaps during the creation of the new loop, the log is hinted about the new position. The scaler for some reason wants extra samples, but the log doesn't have them and so we jump ahead in the log, causing a seek

(update: no, it's not a readahead bug)

@ywwg
Copy link
Member Author

ywwg commented Oct 25, 2022

this feels like a race condition problem where the gui action of the loop enabling conflicts with the engine callback thread that's using the loop

@ywwg
Copy link
Member Author

ywwg commented Oct 25, 2022

I think what's going on is the reader is getting hinted for the new loop values while it's also processing the current samples, so then when the engine buffer scales its samples, it picks up the hint for the new loop position

@ywwg
Copy link
Member Author

ywwg commented Oct 25, 2022

I think the right fix would be to have loop activation be cued like seeks are

@ywwg
Copy link
Member Author

ywwg commented Oct 25, 2022

Here's a race point: if we are processing samples and the loop data changes in the middle of it, it pollutes the readahead call

https://github.com/mixxxdj/mixxx/blob/main/src/engine/readaheadmanager.cpp#L52

(update: nope, not the problem)

@ywwg
Copy link
Member Author

ywwg commented Oct 25, 2022

hmmm now I'm not sure it's a race, but that the loopinfo gets messed up along the way? At creation time the loop seek mode is None, but by the time it's processed it's Changed

(update: I think this one is right??!)

@ywwg
Copy link
Member Author

ywwg commented Oct 25, 2022

#0  LoopingControl::slotBeatLoop(double, bool, bool) (this=0x555557177430, beats=16, keepStartPoint=true, enable=false)
    at /home/owen/src/github/mixxx/src/engine/controls/loopingcontrol.cpp:1423
#1  0x0000555555e5e6c8 in LoopingControl::slotBeatLoopSizeChangeRequest(double) (this=0x555557177430, beats=16) at /home/owen/src/github/mixxx/src/engine/controls/loopingcontrol.cpp:1438
#2  0x0000555555e64b1e in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<double>, void, void (LoopingControl::*)(double)>::call(void (LoopingControl::*)(double), LoopingControl*, void**) (f=(void (LoopingControl::*)(LoopingControl * const, double)) 0x555555e5e694 <LoopingControl::slotBeatLoopSizeChangeRequest(double)>, o=0x555557177430, arg=0x7fffffffb990)
    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:152
#3  0x0000555555e642ea in QtPrivate::FunctionPointer<void (LoopingControl::*)(double)>::call<QtPrivate::List<double>, void>(void (LoopingControl::*)(double), LoopingControl*, void**)
     (f=(void (LoopingControl::*)(LoopingControl * const, double)) 0x555555e5e694 <LoopingControl::slotBeatLoopSizeChangeRequest(double)>, o=0x555557177430, arg=0x7fffffffb990)
    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:185
#4  0x0000555555e6344d in QtPrivate::QSlotObject<void (LoopingControl::*)(double), QtPrivate::List<double>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*)
    (which=1, this_=0x55555717c1a0, r=0x555557177430, a=0x7fffffffb990, ret=0x0) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:418
#5  0x00007ffff3a9c793 in  () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#6  0x00005555557ce91d in ControlDoublePrivate::valueChangeRequest(double) (this=0x55555717bdc0, _t1=16) at /home/owen/src/github/mixxx/cbuild/mixxx-lib_autogen/include/moc_control.cpp:152
#7  0x00005555557d038b in ControlDoublePrivate::set(double, QObject*) (this=0x55555717bdc0, value=16, pSender=0x55556cf672c0) at /home/owen/src/github/mixxx/src/control/control.cpp:266
#8  0x000055555576df12 in ControlProxy::set(double) (this=0x55556cf672c0, v=16) at /home/owen/src/github/mixxx/src/control/controlproxy.h:140
#9  0x0000555555d6d1e0 in WBeatSpinBox::slotSpinboxValueChanged(double) (this=0x55556cf67250, newValue=16) at /home/owen/src/github/mixxx/src/widget/wbeatspinbox.cpp:82
#10 0x0000555555d6fb3c in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<double>, void, void (WBeatSpinBox::*)(double)>::call(void (WBeatSpinBox::*)(double), WBeatSpinBox*, void**) (f=(void (WBeatSpinBox::*)(WBeatSpinBox * const, double)) 0x555555d6d1b2 <WBeatSpinBox::slotSpinboxValueChanged(double)>, o=0x55556cf67250, arg=0x7fffffffbc00)
    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:152
#11 0x0000555555d6faa8 in QtPrivate::FunctionPointer<void (WBeatSpinBox::*)(double)>::call<QtPrivate::List<double>, void>(void (WBeatSpinBox::*)(double), WBeatSpinBox*, void**)
     (f=(void (WBeatSpinBox::*)(WBeatSpinBox * const, double)) 0x555555d6d1b2 <WBeatSpinBox::slotSpinboxValueChanged(double)>, o=0x55556cf67250, arg=0x7fffffffbc00)
    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:185
#12 0x0000555555d6fa0f in QtPrivate::QSlotObject<void (WBeatSpinBox::*)(double), QtPrivate::List<double>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*)
    (which=1, this_=0x55556cf6b4a0, r=0x55556cf67250, a=0x7fffffffbc00, ret=0x0) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:418
#13 0x00007ffff3a9c793 in  () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#14 0x00007ffff6d661e4 in QDoubleSpinBox::valueChanged(double) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#15 0x00007ffff6d62d81 in  () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#16 0x00007ffff6d67468 in QDoubleSpinBox::setValue(double) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#17 0x0000555555d6d244 in WBeatSpinBox::slotControlValueChanged(double) (this=0x55556cf67250, newValue=16) at /home/owen/src/github/mixxx/src/widget/wbeatspinbox.cpp:87
#18 0x0000555555d6fb3c in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<double>, void, void (WBeatSpinBox::*)(double)>::call(void (WBeatSpinBox::*)(double), WBeatSpinBox*, void**) (f=(void (WBeatSpinBox::*)(WBeatSpinBox * const, double)) 0x555555d6d1e4 <WBeatSpinBox::slotControlValueChanged(double)>, o=0x55556cf67250, arg=0x7fffffffbee0)
    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:152
#19 0x0000555555d6faa8 in QtPrivate::FunctionPointer<void (WBeatSpinBox::*)(double)>::call<QtPrivate::List<double>, void>(void (WBeatSpinBox::*)(double), WBeatSpinBox*, void**)
     (f=(void (WBeatSpinBox::*)(WBeatSpinBox * const, double)) 0x555555d6d1e4 <WBeatSpinBox::slotControlValueChanged(double)>, o=0x55556cf67250, arg=0x7fffffffbee0)
    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:185
#20 0x0000555555d6fa0f in QtPrivate::QSlotObject<void (WBeatSpinBox::*)(double), QtPrivate::List<double>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*)
    (which=1, this_=0x55556cf70120, r=0x55556cf67250, a=0x7fffffffbee0, ret=0x0) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:418
#21 0x00007ffff3a9c793 in  () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#22 0x00005555557d74c3 in ControlProxy::valueChanged(double) (this=0x55556cf672c0, _t1=16) at /home/owen/src/github/mixxx/cbuild/mixxx-lib_autogen/include/moc_controlproxy.cpp:164
#23 0x000055555573a170 in ControlProxy::slotValueChangedAuto(double, QObject*) (this=0x55556cf672c0, v=16, pSetter=0x55555717bd20)
    at /home/owen/src/github/mixxx/src/control/controlproxy.h:174
#24 0x000055555573ae76 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0, 1>, QtPrivate::List<double, QObject*>, void, void (ControlProxy::*)(double, QObject*)>::call(void (ControlProxy::*)(double, QObject*), ControlProxy*, void**)
     (f=(void (ControlProxy::*)(ControlProxy * const, double, QObject *)) 0x55555573a138 <ControlProxy::slotValueChangedAuto(double, QObject*)>, o=0x55556cf672c0, arg=0x7fffffffc0f0)
    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:152
#25 0x000055555573ad15 in QtPrivate::FunctionPointer<void (ControlProxy::*)(double, QObject*)>::call<QtPrivate::List<double, QObject*>, void>(void (ControlProxy::*)(double, QObject*), ControlProxy*, void**)
     (f=(void (ControlProxy::*)(ControlProxy * const, double, QObject *)) 0x55555573a138 <ControlProxy::slotValueChangedAuto(double, QObject*)>, o=0x55556cf672c0, arg=0x7fffffffc0f0)
    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:185
#26 0x000055555573ac33 in QtPrivate::QSlotObject<void (ControlProxy::*)(double, QObject*), QtPrivate::List<double, QObject*>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x55556cf69a90, r=0x55556cf672c0, a=0x7fffffffc0f0, ret=0x0) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:418
#27 0x00007ffff3a9c793 in  () at /lib/x86_64-linux-gnu/libQt5Core.so.5
--Type <RET> for more, q to quit, c to continue without paging--
#28 0x00005555557ce8a3 in ControlDoublePrivate::valueChanged(double, QObject*) (this=0x55555717bdc0, _t1=16, _t2=0x55555717bd20)
    at /home/owen/src/github/mixxx/cbuild/mixxx-lib_autogen/include/moc_control.cpp:145
#29 0x00005555557d04f4 in ControlDoublePrivate::setInner(double, QObject*) (this=0x55555717bdc0, value=16, pSender=0x55555717bd20) at /home/owen/src/github/mixxx/src/control/control.cpp:281
#30 0x00005555557d0445 in ControlDoublePrivate::setAndConfirm(double, QObject*) (this=0x55555717bdc0, value=16, pSender=0x55555717bd20)
    at /home/owen/src/github/mixxx/src/control/control.cpp:273
#31 0x000055555577ab01 in ControlObject::setAndConfirm(double) (this=0x55555717bd20, value=16) at /home/owen/src/github/mixxx/src/control/controlobject.h:89
#32 0x0000555555e5b28b in LoopingControl::setLoop(mixxx::audio::FramePos, mixxx::audio::FramePos, bool) (this=0x555557177430, startPosition=..., endPosition=..., enabled=true)
    at /home/owen/src/github/mixxx/src/engine/controls/loopingcontrol.cpp:639
#33 0x0000555555c11357 in EngineBuffer::setLoop(mixxx::audio::FramePos, mixxx::audio::FramePos, bool) (this=0x5555571658a0, startPosition=..., endPositon=..., enabled=true)
    at /home/owen/src/github/mixxx/src/engine/enginebuffer.cpp:384
#34 0x0000555555e51259 in EngineControl::setLoop(mixxx::audio::FramePos, mixxx::audio::FramePos, bool) (this=0x555556b96fe0, startPosition=..., endPosition=..., enabled=true)
    at /home/owen/src/github/mixxx/src/engine/controls/enginecontrol.cpp:83
#35 0x0000555555e49efe in CueControl::setCurrentSavedLoopControlAndActivate(HotcueControl*) (this=0x555556b96fe0, pControl=0x5555568fe120)
    at /home/owen/src/github/mixxx/src/engine/controls/cuecontrol.cpp:2367
#36 0x0000555555e44b67 in CueControl::hotcueActivate(HotcueControl*, double, HotcueSetMode) (this=0x555556b96fe0, pControl=0x5555568fe120, value=1, mode=HotcueSetMode::Auto)
    at /home/owen/src/github/mixxx/src/engine/controls/cuecontrol.cpp:1112
#37 0x0000555555e50b25 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0, 1, 2>, QtPrivate::List<HotcueControl*, double, HotcueSetMode>, void, void (CueControl::*)(HotcueControl*, double, HotcueSetMode)>::call(void (CueControl::*)(HotcueControl*, double, HotcueSetMode), CueControl*, void**)
     (f=(void (CueControl::*)(CueControl * const, HotcueControl *, double, HotcueSetMode)) 0x555555e44880 <CueControl::hotcueActivate(HotcueControl*, double, HotcueSetMode)>, o=0x555556b96fe0, arg=0x7fffffffc640) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:152
#38 0x0000555555e507b0 in QtPrivate::FunctionPointer<void (CueControl::*)(HotcueControl*, double, HotcueSetMode)>::call<QtPrivate::List<HotcueControl*, double, HotcueSetMode>, void>(void (CueControl::*)(HotcueControl*, double, HotcueSetMode), CueControl*, void**)
     (f=(void (CueControl::*)(CueControl * const, HotcueControl *, double, HotcueSetMode)) 0x555555e44880 <CueControl::hotcueActivate(HotcueControl*, double, HotcueSetMode)>, o=0x555556b96fe0, arg=0x7fffffffc640) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:185
#39 0x0000555555e50213 in QtPrivate::QSlotObject<void (CueControl::*)(HotcueControl*, double, HotcueSetMode), QtPrivate::List<HotcueControl*, double, HotcueSetMode>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x55555730dc10, r=0x555556b96fe0, a=0x7fffffffc640, ret=0x0)
    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:418
#40 0x00007ffff3a9c793 in  () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#41 0x0000555555e3bc68 in HotcueControl::hotcueActivate(HotcueControl*, double, HotcueSetMode) (this=0x5555568fe120, _t1=0x5555568fe120, _t2=1, _t3=HotcueSetMode::Auto)
    at /home/owen/src/github/mixxx/cbuild/mixxx-lib_autogen/include/moc_cuecontrol.cpp:491
#42 0x0000555555e4d01e in HotcueControl::slotHotcueActivate(double) (this=0x5555568fe120, v=1) at /home/owen/src/github/mixxx/src/engine/controls/cuecontrol.cpp:2634
#43 0x0000555555e50be3 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<double>, void, void (HotcueControl::*)(double)>::call(void (HotcueControl::*)(double), HotcueControl*, void**) (f=(void (HotcueControl::*)(HotcueControl * const, double)) 0x555555e4cfe8 <HotcueControl::slotHotcueActivate(double)>, o=0x5555568fe120, arg=0x7fffffffc840)
    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:152
#44 0x0000555555e50836 in QtPrivate::FunctionPointer<void (HotcueControl::*)(double)>::call<QtPrivate::List<double>, void>(void (HotcueControl::*)(double), HotcueControl*, void**)
     (f=(void (HotcueControl::*)(HotcueControl * const, double)) 0x555555e4cfe8 <HotcueControl::slotHotcueActivate(double)>, o=0x5555568fe120, arg=0x7fffffffc840)
    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:185
#45 0x0000555555e50445 in QtPrivate::QSlotObject<void (HotcueControl::*)(double), QtPrivate::List<double>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*)
    (which=1, this_=0x555557217ec0, r=0x5555568fe120, a=0x7fffffffc840, ret=0x0) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:418
#46 0x00007ffff3a9c793 in  () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#47 0x00005555557d5e5d in ControlObject::valueChanged(double) (this=0x555557217a30, _t1=1) at /home/owen/src/github/mixxx/cbuild/mixxx-lib_autogen/include/moc_controlobject.cpp:148
#48 0x00005555557d62d0 in ControlObject::privateValueChanged(double, QObject*) (this=0x555557217a30, dValue=1, pSender=0x55556d231970)
    at /home/owen/src/github/mixxx/src/control/controlobject.cpp:56
#49 0x00005555557d6f27 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0, 1>, QtPrivate::List<double, QObject*>, void, void (ControlObject::*)(double, QObject*)>::call(void (ControlObject::*)(double, QObject*), ControlObject*, void**)
     (f=(void (ControlObject::*)(ControlObject * const, double, QObject *)) 0x5555557d6298 <ControlObject::privateValueChanged(double, QObject*)>, o=0x555557217a30, arg=0x7fffffffca50)
    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:152
#50 0x00005555557d6e32 in QtPrivate::FunctionPointer<void (ControlObject::*)(double, QObject*)>::call<QtPrivate::List<double, QObject*>, void>(void (ControlObject::*)(double, QObject*), ControlObject*, void**)
     (f=(void (ControlObject::*)(ControlObject * const, double, QObject *)) 0x5555557d6298 <ControlObject::privateValueChanged(double, QObject*)>, o=0x555557217a30, arg=0x7fffffffca50)
    at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:185
#51 0x00005555557d6cd1 in QtPrivate::QSlotObject<void (ControlObject::*)(double, QObject*), QtPrivate::List<double, QObject*>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**,--Type <RET> for more, q to quit, c to continue without paging--
 bool*) (which=1, this_=0x5555572179b0, r=0x555557217a30, a=0x7fffffffca50, ret=0x0) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:418
#52 0x00007ffff3a9c793 in  () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#53 0x00005555557ce8a3 in ControlDoublePrivate::valueChanged(double, QObject*) (this=0x555557217ad0, _t1=1, _t2=0x55556d231970)
    at /home/owen/src/github/mixxx/cbuild/mixxx-lib_autogen/include/moc_control.cpp:145
#54 0x00005555557d04f4 in ControlDoublePrivate::setInner(double, QObject*) (this=0x555557217ad0, value=1, pSender=0x55556d231970) at /home/owen/src/github/mixxx/src/control/control.cpp:281
#55 0x00005555557d03b5 in ControlDoublePrivate::set(double, QObject*) (this=0x555557217ad0, value=1, pSender=0x55556d231970) at /home/owen/src/github/mixxx/src/control/control.cpp:268
#56 0x00005555557d06b4 in ControlDoublePrivate::setParameter(double, QObject*) (this=0x555557217ad0, dParam=1, pSender=0x55556d231970)
    at /home/owen/src/github/mixxx/src/control/control.cpp:300
#57 0x000055555576df56 in ControlProxy::setParameter(double) (this=0x55556d231970, v=1) at /home/owen/src/github/mixxx/src/control/controlproxy.h:144
#58 0x0000555555d685e4 in ControlWidgetConnection::setControlParameter(double) (this=0x55556d2383d0, parameter=1) at /home/owen/src/github/mixxx/src/widget/controlwidgetconnection.cpp:48
#59 0x0000555555d68a92 in ControlParameterWidgetConnection::setControlParameterDown(double) (this=0x55556d2383d0, v=1)
    at /home/owen/src/github/mixxx/src/widget/controlwidgetconnection.cpp:111
#60 0x0000555555ac5b59 in WBaseWidget::setControlParameterLeftDown(double) (this=0x55556d20bb70, v=1) at /home/owen/src/github/mixxx/src/widget/wbasewidget.cpp:115
#61 0x0000555555d8c7fd in WPushButton::mousePressEvent(QMouseEvent*) (this=0x55556d20bb40, e=0x7fffffffd400) at /home/owen/src/github/mixxx/src/widget/wpushbutton.cpp:409
#62 0x0000555555d810f6 in WHotcueButton::mousePressEvent(QMouseEvent*) (this=0x55556d20bb40, e=0x7fffffffd400) at /home/owen/src/github/mixxx/src/widget/whotcuebutton.cpp:130
#63 0x00007ffff6bf74ee in QWidget::event(QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#64 0x0000555555b10514 in WWidget::event(QEvent*) (this=0x55556d20bb40, e=0x7fffffffd400) at /home/owen/src/github/mixxx/src/widget/wwidget.cpp:110
#65 0x0000555555d8ca3e in WPushButton::event(QEvent*) (this=0x55556d20bb40, e=0x7fffffffd400) at /home/owen/src/github/mixxx/src/widget/wpushbutton.cpp:442
#66 0x00007ffff6bb4713 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#67 0x00007ffff6bbc364 in QApplication::notify(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#68 0x00005555556a9eef in MixxxApplication::notify(QObject*, QEvent*) (this=0x7fffffffdc10, target=0x55556d20bb40, event=0x7fffffffd400)
    at /home/owen/src/github/mixxx/src/mixxxapplication.cpp:164
#69 0x00007ffff3a64e3a in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#70 0x00007ffff6bbae47 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool, bool) ()
    at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#71 0x00007ffff6c10d40 in  () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#72 0x00007ffff6c13fd5 in  () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#73 0x00007ffff6bb4713 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#74 0x00005555556a9eef in MixxxApplication::notify(QObject*, QEvent*) (this=0x7fffffffdc10, target=0x555574f91f40, event=0x7fffffffd710)
    at /home/owen/src/github/mixxx/src/mixxxapplication.cpp:164
#75 0x00007ffff3a64e3a in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#76 0x00007ffff6465307 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) () at /lib/x86_64-linux-gnu/libQt5Gui.so.5
#77 0x00007ffff643aa2c in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib/x86_64-linux-gnu/libQt5Gui.so.5
#78 0x00007fffea6e5d6e in  () at /lib/x86_64-linux-gnu/libQt5XcbQpa.so.5
#79 0x00007ffff2a9dd1b in g_main_context_dispatch () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#80 0x00007ffff2af26f8 in  () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#81 0x00007ffff2a9b3c3 in g_main_context_iteration () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#82 0x00007ffff3abe0b8 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#83 0x00007ffff3a6375b in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#84 0x00007ffff3a6bcf4 in QCoreApplication::exec() () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#85 0x0000555555662cc4 in (anonymous namespace)::runMixxx(MixxxApplication*, CmdlineArgs const&) (pApp=0x7fffffffdc10, args=...) at /home/owen/src/github/mixxx/src/main.cpp:74
#86 0x0000555555663466 in main(int, char**) (argc=2, argv=0x7fffffffdd98) at /home/owen/src/github/mixxx/src/main.cpp:202

@ywwg
Copy link
Member Author

ywwg commented Oct 25, 2022

so my new wonderful theory is that the change of the beatloop spinbox value triggers the creation of a "new" enabled loop. I am all over the place on this lol

ywwg added a commit to ywwg/mixxx that referenced this issue Oct 25, 2022
This works around mixxxdj#11003 in which the adjustment of the spinbox creates a new loop, causing a sudden unexpected seek
ywwg added a commit to ywwg/mixxx that referenced this issue Oct 25, 2022
This works around mixxxdj#11003 in which the adjustment of the spinbox creates a new loop, causing a sudden unexpected seek
@ywwg
Copy link
Member Author

ywwg commented Oct 25, 2022

if someone can remind me of the correct way to make a change to a CO without causing it to emit a valuechanged signal, that would help. We'd like to be able to change the spinbox value without having it be interpretted as a request to make a new loop

@ywwg
Copy link
Member Author

ywwg commented Oct 25, 2022

I also see these assertion failures:

critical [Main] DEBUG ASSERT: "pSavedLoopControl->getCue() && pSavedLoopControl->getCue()->getEndPosition() == mixxx::audio::FramePos::fromEngineSamplePosMaybeInvalid( m_pLoopEndPosition->get())" in function void CueControl::slotLoopEnabledChanged(bool) at /home/owen/src/github/mixxx/src/engine/controls/cuecontrol.cpp:2379

@ywwg
Copy link
Member Author

ywwg commented Oct 25, 2022

I think this happens for the same reason, a "new" loop is created that's a little different from the saved one

@daschuer
Copy link
Member

I cannot reproduce the issue with the latest main on Ubuntu Focal. Is It skin related or do you trigger the bug with a controller?

@daschuer
Copy link
Member

daschuer commented May 7, 2023

I think this is closed by #11006 please reopen or file a new bug if there is a remaining issue.

@daschuer daschuer closed this as completed May 7, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants