-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
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
Execption while closing Mixxx #11737
Comments
Does this also happen with the allshader waveforms? |
Additional information:
|
It looks like the WaveformWidget is being destroyed while it is still in use in the render signal/slot. I don't understand how this is possible; I believe the following code intends avoiding this from happening: There is this signal when the widget is destroyed:
This sets the pointer in WWaveformViewer to null:
And the conflictive access happens through the WWaveformViewer
Maybe doing this on destroyed is already too late? I will try with a debug build to see if I can reproduce this, or run with ASAN. |
Btw, when you say: (Target x64_off), what do you mean by that? What does this do? |
|
I tried on macos with a debug build and address sanitizer, but mixxx quits cleanly. Now, I think the macos buildenv doesn't come with a debug build of Qt (@daschuer will know) so that might make a difference. |
There are two versions of the buildenv, one with Debug and Release binaries and a smaller one with Release binaries only. |
In that case I believe I used debug binaries. But I'll double-check. |
If you properly selected CMAKE_BUILD_TYPE= Lines 56 to 58 in 3de2963
|
I assume the pWaveformWidget is dangling. I think we need to used a QPointer in WaveformWidgetHolder for m_waveformWidget. An other issue could be a signal on the Qt queue from the VSyncThread that arrives just after the Factory has been deleted. This can be fixed by using QObject::deleteLater() instead of WaveformWidgetFactory::destroy(); Maybe we should fix both. |
I don't think that is true. From the QObject::~QObject documentation: |
Yes, you are right, I missed the fact that there is a wait() statement in the destructor. This way we can not have a race condition that would lead to the described issue. |
Qt6 reports this error (doesn't occur with Qt5):
|
My best guess would be a lifetime issue where the waveformwidget outlives the waveformviewer. mixxx/src/widget/wwaveformviewer.cpp Lines 264 to 273 in de4e2cc
The proper fix would likely require finding where the Edit: note to self. I should start rereading the thread more often before commenting to avoid looking like an idiot when I just end up repeating what has already been said. 😅 |
Bug Description
@m0dB This exception happens for me, after closing Mixxx by clicking on the X button on the top right of the main window.
Version
2.4.0 Beta
OS
Windows 11
The text was updated successfully, but these errors were encountered: