Skip to content

Fix controller script validation tests#9

Closed
Be-ing wants to merge 2 commits intoferranlala:migrate-to-QJSEnginefrom
Be-ing:script_updates
Closed

Fix controller script validation tests#9
Be-ing wants to merge 2 commits intoferranlala:migrate-to-QJSEnginefrom
Be-ing:script_updates

Conversation

@Be-ing
Copy link
Copy Markdown

@Be-ing Be-ing commented Jan 7, 2019

No description provided.

@Be-ing Be-ing changed the base branch from master to migrate-to-QJSEngine January 7, 2019 03:44
@Be-ing Be-ing changed the title Fix controller script validation tests with Qt 5.12 Fix controller script validation tests Jan 7, 2019
@Be-ing
Copy link
Copy Markdown
Author

Be-ing commented Jan 7, 2019

I can't get the last commit to build. Could you give it a try?

@ferranlala
Copy link
Copy Markdown
Owner

Thanks! I'm closing this and merging locally. You made ControllerJSProxy::send function virtual, but it was also inline, thus this was happening: https://www.daniweb.com/programming/software-development/threads/114299/undefined-reference-to-vtable-for

@ferranlala ferranlala closed this Jan 7, 2019
@ferranlala
Copy link
Copy Markdown
Owner

Well...it turned out not to be that simple...

@ferranlala
Copy link
Copy Markdown
Owner

From the GCC FAQ: The solution is to ensure that all virtual methods that are not pure are defined.

@ferranlala ferranlala reopened this Jan 7, 2019
@ferranlala
Copy link
Copy Markdown
Owner

I give up. I don't know how to fix this. I've tried making both ControllerJSProxy::send and FakeControllerJSProxy::send out-of-line but still getting the error

Undefined symbols for architecture x86_64:
  "vtable for FakeControllerJSProxy", referenced from:
      FakeControllerJSProxy::FakeControllerJSProxy() in controller_preset_validation_test.o
      FakeControllerJSProxy::FakeControllerJSProxy() in controller_preset_validation_test.o
      FakeController::jsProxy() in controller_preset_validation_test.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.

@ferranlala
Copy link
Copy Markdown
Owner

I managed to fix the issue by adding a header file to the test. I think the moc was not processing FakeControllerJSProxy. I'm pushing directly to mixxxdj#1795

@ferranlala ferranlala closed this Jan 11, 2019
@Be-ing Be-ing deleted the script_updates branch April 24, 2019 23:48
ferranlala pushed a commit that referenced this pull request Dec 27, 2020
ColumnCache: Verify consistency of all column maps
ferranlala pushed a commit that referenced this pull request May 7, 2022
…h sync

When loading a track that is not yet present in the library (and thus
doesn't have any BPM because it hasn't been analyzed yet) while another
deck is playing and both decks have sync enabled, a debug assertion is
triggered:

    DEBUG ASSERT: "isValid()" in function double mixxx::Bpm::value() const at src/track/bpm.h:53
    Aborted (core dumped)

The backtrace looks as follows:

    #0  0x00007f175c87234c in __pthread_kill_implementation () at /usr/lib/libc.so.6
    #1  0x00007f175c8254b8 in raise () at /usr/lib/libc.so.6
    #2  0x00007f175c80f534 in abort () at /usr/lib/libc.so.6
    #3  0x00007f175cf05ee4 in qt_assert(char const*, char const*, int) () at /usr/lib/libQt5Core.so.5
    #4  0x000055deb2e67e1c in mixxx::(anonymous namespace)::handleMessage(QtMsgType, QMessageLogContext const&, QString const&) (type=<optimized out>, context=<optimized out>, input=<optimized out>) at src/util/logging.cpp:355
    #5  0x00007f175cf47128 in  () at /usr/lib/libQt5Core.so.5
    #6  0x00007f175cf3fd8a in  () at /usr/lib/libQt5Core.so.5
    #7  0x00007f175cf06526 in QMessageLogger::critical(char const*, ...) const () at /usr/lib/libQt5Core.so.5
    #8  0x000055deb2e5c720 in mixxx_debug_assert(char const*, char const*, int, char const*) (assertion=assertion@entry=0x55deb39bd0db "isValid()", file=file@entry=0x55deb39bbf30 "src/track/bpm.h", line=line@entry=53, function=function@entry=0x55deb39bbf08 "double mixxx::Bpm::value() const") at gsrc/util/assert.h:9
    #9  0x000055deb2ee7e7e in mixxx_debug_assert_return_true(char const*, char const*, int, char const*) (function=0x55deb39bbf08 "double mixxx::Bpm::value() const", line=53, file=0x55deb39bbf30 "src/track/bpm.h", assertion=0x55deb39bd0db "isValid()") at gsrc/util/assert.h:18
    #10 mixxx::Bpm::value() const (this=<synthetic pointer>) at src/track/bpm.h:53
    #11 mixxx::operator*(mixxx::Bpm, double) (multiple=1, bpm=...) at src/track/bpm.h:160
    #12 SyncControl::setLocalBpm(mixxx::Bpm) (this=<optimized out>, localBpm=...) at src/engine/sync/synccontrol.cpp:567
    #13 0x000055deb34c7ba3 in EngineBuffer::postProcess(int) (this=0x55deb56eb060, iBufferSize=2048) at src/engine/enginebuffer.cpp:1318
    #14 0x000055deb3139023 in EngineMaster::processChannels(int) (this=0x55deb5449440, iBufferSize=<optimized out>) at src/engine/enginemaster.cpp:383
    #15 0x000055deb31394f7 in EngineMaster::process(int) (this=0x55deb5449440, iBufferSize=iBufferSize@entry=2048) at src/engine/enginemaster.cpp:410
    #16 0x000055deb2f91d0b in SoundManager::onDeviceOutputCallback(long) (this=<optimized out>, iFramesPerBuffer=iFramesPerBuffer@entry=1024) at src/soundio/soundmanager.cpp:596
    #17 0x000055deb32dd794 in SoundDevicePortAudio::callbackProcessClkRef(long, float*, float const*, PaStreamCallbackTimeInfo const*, unsigned long) (this=0x55deb553e6b0, framesPerBuffer=1024, out=<optimized out>, in=<optimized out>, timeInfo=<optimized out>, statusFlags=<optimized out>) at src/soundio/sounddeviceportaudio.cpp:965

This happens because `newLocalBpm` is invalid when `localBpm` is
invalid. Trying to do sync decks while no tempo information is available
does not make sense, so we only synchronize decks if the local BPM is
available.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants