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

Implement Un-eject #4668

Merged
merged 7 commits into from
Feb 18, 2022
Merged

Implement Un-eject #4668

merged 7 commits into from
Feb 18, 2022

Conversation

ywwg
Copy link
Member

@ywwg ywwg commented Feb 8, 2022

When ejecting a track, save a pointer to the ejected track. If the user presses eject on an empty track in any deck or sampler, the saved track is loaded.

The track is loaded fresh, not as a "Deck clone" operation.

This enables a sort of "eject undo" as well as "track stashing". It requires no changes to controller configs.

This required a refactor of the eject code to remove it from the EngineBuffer. Tests still pass. Hand-testing works.

connect(pSampler,
&BaseTrackPlayer::trackUnloaded,
this,
&PlayerManager::slotStoreParkedTrack);
}

// Connect the player to the analyzer queue so that loaded tracks are
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I decided not to connect the signal to the preview deck, because that deck will have a lot more churn, but that could be changed

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That sounds reasonable

@ywwg ywwg marked this pull request as draft February 8, 2022 20:21
@ywwg
Copy link
Member Author

ywwg commented Feb 8, 2022

will add a test if people like the idea

@JoergAtGithub
Copy link
Member

Makes sense to me!

@ywwg
Copy link
Member Author

ywwg commented Feb 8, 2022

there are some remaining questions around exact implementation but I think there's consensus at least for the concept. We can start with this and iterate as needed

VERIFY_OR_DEBUG_ASSERT(track) {
return;
}
m_pLastEjectedTrack = track;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Keeping more tracks loaded in-memory for an unforeseeable and unlimited amount of time will only fuel the various issues we already experience with delayed database updates and metadata synchronization. Uncontrolled accumulation of state gets you into trouble.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The trackId can be stored without issues, right?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Performance wise it is a good idea to use the pointer.

How is the situation with our cache? Is guaranteed that the last ejected track is kept in cache?
Holding the pointer here enforces that, which is a good idea from that perspective.

The the issue with this is that it is hidden behind the scenes and it is hard to predict when the metadata is written to the file. We are already in that state, right? Is this relevant here?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see stale search results all the time, caused by these kind of issues. It's not only about metadata.

And it is bad practice to keep data alive for an unlimited of time. If you don't use the deck anymore the pointer is kept alive until Mixxx is finally closed.

Either store an ID are use a timer to reset the pointer periodically. I guess we have a similar caching issue in BaseTrackCache.

Copy link
Contributor

@uklotzde uklotzde Feb 9, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And remember. These are fat QObjects with all the wiring that may cause all kinds of weird side-effects. This design is already unmaintainable. Don't make the situation worse.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah we can switch this to an ID.

As to Daniel's question above, if the ID is invalid (because of something strange like the user deleted the file) the track load will simply fail

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any hint for how to load a track by trackid? I am a little lost in the library code

Copy link
Contributor

@uklotzde uklotzde Feb 9, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TrackCollectonManager::getTrackById()

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is fixed

@daschuer
Copy link
Member

daschuer commented Feb 9, 2022

Schould this work for any unload action, like replacing a track? Or only for explicit "ejects"?
The naming in the code should clarify it which is not fully the case.

A corner case would be to load an not existing track. Does it eject the old? Is this considered as an eject action?

return;
}
if (!m_pLoadedTrack) {
auto lastEjected = m_pPlayerManager->getLastEjectedTrack();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We do not know what lastEjected is here. So I would prefer to either rename it or replace auto.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

src/mixer/basetrackplayer.cpp Outdated Show resolved Hide resolved
connect(pSampler,
&BaseTrackPlayer::trackUnloaded,
this,
&PlayerManager::slotStoreParkedTrack);
}

// Connect the player to the analyzer queue so that loaded tracks are
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That sounds reasonable

VERIFY_OR_DEBUG_ASSERT(track) {
return;
}
m_pLastEjectedTrack = track;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Performance wise it is a good idea to use the pointer.

How is the situation with our cache? Is guaranteed that the last ejected track is kept in cache?
Holding the pointer here enforces that, which is a good idea from that perspective.

The the issue with this is that it is hidden behind the scenes and it is hard to predict when the metadata is written to the file. We are already in that state, right? Is this relevant here?

@github-actions github-actions bot added the build label Feb 9, 2022
@ywwg ywwg marked this pull request as ready for review February 9, 2022 13:45
@ywwg
Copy link
Member Author

ywwg commented Feb 9, 2022

Schould this work for any unload action, like replacing a track? Or only for explicit "ejects"?

any unload would trigger this, including replacing a track in a deck

@ronso0
Copy link
Member

ronso0 commented Feb 9, 2022

Schould this work for any unload action, like replacing a track? Or only for explicit "ejects"?

any unload would trigger this, including replacing a track in a deck

In Zulip I also threw in "un-replace", i.e. reload the track which was (accidentally) replaced.
Did you already consider that?
To "un-replace" (single-)clicking eject would obviously not work, but double-click would.

@ywwg
Copy link
Member Author

ywwg commented Feb 9, 2022

To "un-replace" (single-)clicking eject would obviously not work, but double-click would.

I would really prefer not to implement a double-click function in this first change. Can that wait for a followup?

@ronso0
Copy link
Member

ronso0 commented Feb 9, 2022

Sure, no hurry. I was just wondering if you think this is a valid use case / extension. If so, it'll probably be better to consider it now already, instead of having to bend over afterwards.

@ywwg
Copy link
Member Author

ywwg commented Feb 10, 2022

Sure, no hurry. I was just wondering if you think this is a valid use case / extension. If so, it'll probably be better to consider it now already, instead of having to bend over afterwards.

Cool. Yeah I think an un-replace would be useful, and wouldn't be hard to implement with this as a foundation -- it could be a new CO, or a doubleclick / long press CO, and hook into the same basic structure. The refactor of the eject mechanism into playermanager is what makes it possible.

@ywwg ywwg requested a review from daschuer February 10, 2022 04:00
@ywwg
Copy link
Member Author

ywwg commented Feb 10, 2022

I believe notes are addressed. I now store the trackid instead of trackpointer to free the resources. The test is pretty heavy now because we need a database to do the library lookup, but it's not so bad.

Copy link
Member

@daschuer daschuer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, Thank you!

@daschuer
Copy link
Member

Oh there is an Qt 6 issue:

PlayerManagerTest.UnEjectReplaceTrackTest (Failed)
C++ exception with description "std::bad_alloc" thrown in the test body.

@ywwg
Copy link
Member Author

ywwg commented Feb 10, 2022

I have been unable to install / test QT6. Can someone else figure out what it's complaining about? (a stack trace would help)

@ywwg
Copy link
Member Author

ywwg commented Feb 10, 2022

or can we just disable the test on qt6 for now

@Holzhaus
Copy link
Member

I don't get the bad_alloc error but these 3 tests fail:

761/764 Test #490: PlayerManagerTest.UnEjectReplaceTrackTest ..................................................***Exception: Interrupt  0.33 sec
QML debugging is enabled. Only use this in a safe environment.
Note: Google Test filter = PlayerManagerTest.UnEjectReplaceTrackTest
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from PlayerManagerTest
[ RUN      ] PlayerManagerTest.UnEjectReplaceTrackTest
info [0x55cfe83cdf80] DbConnection - Available drivers for database connections: QList("QIBASE", "QSQLITE", "QMARIADB", "QMYSQL", "QODBC", "QPSQL")
info [0x55cfe83cdf80] DbConnectionPool - Cloned thread-local database connection "MIXXX-1" QSqlDatabase(driver="QSQLITE", database="file:///tmp/mixxx-test-MUHuCB/mixxxdb.sqlite?mode=memory&cache=shared", host="", port=-1, user="mixxx", open=true)
info [0x55cfe83cdf80] SoundSourceFFmpeg - Disabling untested input formats: aa, aax, ac3, ace, acm, act, adf, adp, ads, adx, aea, afc, aix, alp, amr, amrnb, amrwb, anm, apc, ape, apm, apng, aptx, aptx_hd, aqtitle, argo_asf, argo_brp, asf, asf_o, ass, ast, au, av1, avi, avisynth, avr, avs, avs2, avs3, bethsoftvid, bfi, bin, bink, binka, bit, bmv, bfstm, brstm, boa, c93, caf, cavsvideo, cdg, cdxl, cine, codec2, codec2raw, concat, dash, data, daud, dcstr, derf, dfa, dhav, dirac, dnxhd, dsf, dsicin, dss, dts, dtshd, dv, dvbsub, dvbtxt, dxa, ea, ea_cdata, eac3, epaf, ffmetadata, filmstrip, fits, flac, flic, flv, live_flv, 4xm, frm, fsb, fwse, g722, g723_1, g726, g726le, g729, gdv, genh, gif, gsm, gxf, h261, h263, h264, hca, hcom, hevc, hls, hnm, ico, idcin, idf, iff, ifv, ilbc, image2, image2pipe, alias_pix, brender_pix, ingenient, ipmovie, ipu, ircam, iss, iv8, ivf, ivr, jacosub, jv, kux, kvag, lmlm4, loas, luodat, lrc, lvf, lxf, mca, mcc, matroska,webm, mgsts, microdvd, mjpeg, mjpeg_2000, mlp, mlv, mm, mmf, mods, moflex, mpc, mpc8, mpeg, mpegts, mpegtsraw, mpegvideo, mpjpeg, mpl2, mpsub, msf, msnwctcp, msp, mtaf, mtv, musx, mv, mvi, mxf, mxg, nc, nistsphere, nsp, nsv, nut, nuv, obu, ogg, oma, paf, alaw, mulaw, vidc, f64be, f64le, f32be, f32le, s32be, s32le, s24be, s24le, s16be, s16le, s8, u32be, u32le, u24be, u24le, u16be, u16le, u8, pjs, pmp, pp_bnk, pva, pvf, qcp, r3d, rawvideo, realtext, redspark, rl2, rm, roq, rpl, rsd, rso, rtp, rtsp, s337m, sami, sap, sbc, sbg, scc, sdp, sdr2, sds, sdx, film_cpk, ser, sga, shn, siff, simbiosis_imx, sln, smk, smjpeg, smush, sol, sox, spdif, srt, psxstr, stl, subviewer1, subviewer, sup, svag, svs, swf, tak, tedcaptions, thp, 3dostr, tiertexseq, tmv, truehd, tta, txd, tty, ty, v210, v210x, vag, vc1, vc1test, vividas, vivo, vmd, vobsub, voc, vpk, vplayer, vqf, w64, wc3movie, webm_dash_manifest, webvtt, wsaud, wsd, wsvqa, wtv, wve, xa, xbin, xmv, xvag, xwma, yop, yuv4mpegpipe, bmp_pipe, cri_pipe, dds_pipe, dpx_pipe, exr_pipe, gif_pipe, j2k_pipe, jpeg_pipe, jpegls_pipe, pam_pipe, pbm_pipe, pcx_pipe, pgmyuv_pipe, pgm_pipe, pgx_pipe, photocd_pipe, pictor_pipe, png_pipe, ppm_pipe, psd_pipe, qdraw_pipe, sgi_pipe, svg_pipe, sunrast_pipe, tiff_pipe, webp_pipe, xbm_pipe, xpm_pipe, xwd_pipe, libmodplug
info [0x55cfe83cdf80] faad2::LibLoader - Successfully loaded FAAD2 library "libfaad.so.2" version 2.10.0
info [0x55cfe83cdf80] SoundSourceSndFile - Disabling OGG decoding for "libsndfile-1.0.31"
info [0x55cfe83cdf80] SoundSourceProxy - SoundSource providers for file type "3g2"
info [0x55cfe83cdf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x55cfe83cdf80] SoundSourceProxy - SoundSource providers for file type "3gp"
info [0x55cfe83cdf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x55cfe83cdf80] SoundSourceProxy - SoundSource providers for file type "aac"
info [0x55cfe83cdf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x55cfe83cdf80] SoundSourceProxy - SoundSource providers for file type "aiff"
info [0x55cfe83cdf80] SoundSourceProxy - 3 (default) : "libsndfile"
info [0x55cfe83cdf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x55cfe83cdf80] SoundSourceProxy - SoundSource providers for file type "caf"
info [0x55cfe83cdf80] SoundSourceProxy - 2 (lower) : "libsndfile"
info [0x55cfe83cdf80] SoundSourceProxy - SoundSource providers for file type "flac"
info [0x55cfe83cdf80] SoundSourceProxy - 4 (higher) : "Xiph.org libFLAC"
info [0x55cfe83cdf80] SoundSourceProxy - 2 (lower) : "libsndfile"
info [0x55cfe83cdf80] SoundSourceProxy - SoundSource providers for file type "it"
info [0x55cfe83cdf80] SoundSourceProxy - 3 (default) : "MODPlug"
info [0x55cfe83cdf80] SoundSourceProxy - SoundSource providers for file type "m4a"
info [0x55cfe83cdf80] SoundSourceProxy - 3 (default) : "Nero FAAD2"
info [0x55cfe83cdf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x55cfe83cdf80] SoundSourceProxy - SoundSource providers for file type "mj2"
info [0x55cfe83cdf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x55cfe83cdf80] SoundSourceProxy - SoundSource providers for file type "mod"
info [0x55cfe83cdf80] SoundSourceProxy - 3 (default) : "MODPlug"
info [0x55cfe83cdf80] SoundSourceProxy - SoundSource providers for file type "mov"
info [0x55cfe83cdf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x55cfe83cdf80] SoundSourceProxy - SoundSource providers for file type "mp3"
info [0x55cfe83cdf80] SoundSourceProxy - 3 (default) : "MAD: MPEG Audio Decoder"
info [0x55cfe83cdf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x55cfe83cdf80] SoundSourceProxy - SoundSource providers for file type "mp4"
info [0x55cfe83cdf80] SoundSourceProxy - 3 (default) : "Nero FAAD2"
info [0x55cfe83cdf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x55cfe83cdf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x55cfe83cdf80] SoundSourceProxy - SoundSource providers for file type "ogg"
info [0x55cfe83cdf80] SoundSourceProxy - 4 (higher) : "Xiph.org OggVorbis"
info [0x55cfe83cdf80] SoundSourceProxy - SoundSource providers for file type "okt"
info [0x55cfe83cdf80] SoundSourceProxy - 3 (default) : "MODPlug"
info [0x55cfe83cdf80] SoundSourceProxy - SoundSource providers for file type "opus"
info [0x55cfe83cdf80] SoundSourceProxy - 4 (higher) : "Xiph.org libopusfile"
info [0x55cfe83cdf80] SoundSourceProxy - SoundSource providers for file type "s3m"
info [0x55cfe83cdf80] SoundSourceProxy - 3 (default) : "MODPlug"
info [0x55cfe83cdf80] SoundSourceProxy - SoundSource providers for file type "stm"
info [0x55cfe83cdf80] SoundSourceProxy - 3 (default) : "MODPlug"
info [0x55cfe83cdf80] SoundSourceProxy - SoundSource providers for file type "wav"
info [0x55cfe83cdf80] SoundSourceProxy - 3 (default) : "libsndfile"
info [0x55cfe83cdf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x55cfe83cdf80] SoundSourceProxy - SoundSource providers for file type "wv"
info [0x55cfe83cdf80] SoundSourceProxy - 4 (higher) : "WavPack"
info [0x55cfe83cdf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x55cfe83cdf80] SoundSourceProxy - SoundSource providers for file type "xm"
info [0x55cfe83cdf80] SoundSourceProxy - 3 (default) : "MODPlug"
info [0x55cfe83cdf80] SettingsDAO - Failed to prepare query: Returning default value "" for "mixxx.schema.version"
info [0x55cfe83cdf80] SettingsDAO - Failed to prepare query: Returning default value "" for "mixxx.schema.last_used_version"
info [0x55cfe83cdf80] SettingsDAO - Failed to prepare query: Returning default value "" for "mixxx.schema.version"
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema from version 0 to version 39
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 1 : "The base schema for the Mixxx SQLITE database."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 1
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 2 : "Add a header_parsed integer column to the library to indicate when a\n      track's tags have been parsed."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 2
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 3 : "Change the location column to be a an integer. Change comment to be\n      varchar(256) and album/artist/title to be varchar(64)."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 3
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 4 : "Add file type column."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 4
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 5 : "Add needs_verification column to library hashes table."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 5
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 6 : "Added a ReplayGain Column."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 6
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 7 : "Add timesplayed and rating column. Reset header state."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 7
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 8 : "Added iTunes tables"
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 8
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 9 : "Tables for Traktor library feature"
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 9
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 10 : "Playlist and crate locks"
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 10
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 11 : "Tables for Rhythmbox library feature"
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 11
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 12 : "Add beats column to library table."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 12
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 13 : "Add position column to Rhythmbox, iTunes, and Traktor playlist tables."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 13
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 14 : "Add composer column to library table."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 14
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 15 : "Add datetime_added to playlists tracks."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 15
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 16 : "Add track analysis table."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 16
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 17 : "Add columns for BPM lock and a sub-version string for beats."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 17
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 18 : "Add keys column to library table."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 18
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 19 : "Add key_id column to library table for caching the global key. Default to\n      INVALID."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 19
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 20 : "Crates in AutoDJ queue (for automated random-track selection)."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 20
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 21 : "Add grouping and album_artist column to library table."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 21
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 22 : "Add grouping and album_artist column to itunes_library table."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 22
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 23 : "Add directories table"
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 23
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 24 : "Add cover art support. Default source is UNKNOWN and default type is NONE."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 24
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 25 : "Add full replay gain support including peak amplitude. The default\n      value for the peak amplitude is \"undefined\", represented by any\n      negative value. The internal constant for \"undefined\" is -1.0."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 25
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 26 : "Add new column \"tracktotal\" column that stores the total number of\n      tracks as a string. The total number of tracks will be reloaded\n      from the corresponding file upon first access when encountering\n      the default value."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 26
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 27 : "Add cue color support. Default color is #FF0000."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 27
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 28 : "Reset replay gain info for all FLAC files after fixing a decoding bug in version 2.1.0."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 28
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 29 : "This was used in the development of 2.3 to track whether cues were placed\n      manually or automatically. However, this turned out to be unnecessary.\n      This version is left as a placeholder so users who were using the master\n      branch will have their database updated correctly for the subsequent\n      schema change."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 29
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 30 : "This was used in the development of 2.3 for permanent Rekordbox\n      library feature tables, which have since been replaced by\n      dynamic temporary tables, similar to the Serato library\n      feature."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 30
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 31 : "Add track color support."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 31
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 32 : "Convert the PredefinedColor ID to the actual RGB value."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 32
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 33 : "Add cover art image digest and (background) color"
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 33
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 34 : "Add indexes for tracks in playlists and crates"
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 34
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 35 : "Add last_played_at column to library table"
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 35
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 36 : "Populate last_played_at column in library table from play history"
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 36
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 37 : "Add source_synchronized_ms column to library table"
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 37
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 38 : "Fix 0/NULL issue after upgrade to schema version 37."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 38
info [0x55cfe83cdf80] SchemaManager - Upgrading database schema to version 39 : "Replace file type \"aif\" with \"aiff\"."
info [0x55cfe83cdf80] SchemaManager - Upgraded database schema to version 39
info [0x55cfe83cdf80] GlobalTrackCache - Creating instance
info [0x55cfe83cdf80] TrackCollection - Connecting database
info [0x55cfe83cdf80] TrackCollectionManager - External collections are disabled in test mode
info [0x55cfe83cdf80] TrackCollectionManager - Library scanner is disabled in test mode
ALSA lib pcm_dsnoop.c:601:(snd_pcm_dsnoop_open) unable to open slave
ALSA lib pcm_dmix.c:1032:(snd_pcm_dmix_open) unable to open slave
ALSA lib pcm.c:2664:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2664:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2664:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm_oss.c:397:(_snd_pcm_oss_open) Cannot open device /dev/dsp
ALSA lib pcm_oss.c:397:(_snd_pcm_oss_open) Cannot open device /dev/dsp
ALSA lib pcm_a52.c:1001:(_snd_pcm_a52_open) a52 is only for playback
ALSA lib confmisc.c:160:(snd_config_get_card) Invalid field card
ALSA lib pcm_usb_stream.c:482:(_snd_pcm_usb_stream_open) Invalid card 'card'
ALSA lib confmisc.c:160:(snd_config_get_card) Invalid field card
ALSA lib pcm_usb_stream.c:482:(_snd_pcm_usb_stream_open) Invalid card 'card'
ALSA lib pcm_dmix.c:1032:(snd_pcm_dmix_open) unable to open slave
warning [0x55cfe83cdf80] ControlObject "[Library]" "key_notation" already created
critical [0x55cfe83cdf80] DEBUG ASSERT: "!"pCreatorCO != nullptr, ControlObject already created"" in function static QSharedPointer<ControlDoublePrivate> ControlDoublePrivate::getControl(const ConfigKey&, ControlFlags, ControlObject*, bool, bool, bool, double) at /home/jan/Projects/mixxx/src/control/control.cpp:158

762/764 Test #489: PlayerManagerTest.UnEjectTest ..............................................................***Exception: Interrupt  0.34 sec
QML debugging is enabled. Only use this in a safe environment.
Note: Google Test filter = PlayerManagerTest.UnEjectTest
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from PlayerManagerTest
[ RUN      ] PlayerManagerTest.UnEjectTest
info [0x55e0a6ccbf80] DbConnection - Available drivers for database connections: QList("QIBASE", "QSQLITE", "QMARIADB", "QMYSQL", "QODBC", "QPSQL")
info [0x55e0a6ccbf80] DbConnectionPool - Cloned thread-local database connection "MIXXX-1" QSqlDatabase(driver="QSQLITE", database="file:///tmp/mixxx-test-Fkelag/mixxxdb.sqlite?mode=memory&cache=shared", host="", port=-1, user="mixxx", open=true)
info [0x55e0a6ccbf80] SoundSourceFFmpeg - Disabling untested input formats: aa, aax, ac3, ace, acm, act, adf, adp, ads, adx, aea, afc, aix, alp, amr, amrnb, amrwb, anm, apc, ape, apm, apng, aptx, aptx_hd, aqtitle, argo_asf, argo_brp, asf, asf_o, ass, ast, au, av1, avi, avisynth, avr, avs, avs2, avs3, bethsoftvid, bfi, bin, bink, binka, bit, bmv, bfstm, brstm, boa, c93, caf, cavsvideo, cdg, cdxl, cine, codec2, codec2raw, concat, dash, data, daud, dcstr, derf, dfa, dhav, dirac, dnxhd, dsf, dsicin, dss, dts, dtshd, dv, dvbsub, dvbtxt, dxa, ea, ea_cdata, eac3, epaf, ffmetadata, filmstrip, fits, flac, flic, flv, live_flv, 4xm, frm, fsb, fwse, g722, g723_1, g726, g726le, g729, gdv, genh, gif, gsm, gxf, h261, h263, h264, hca, hcom, hevc, hls, hnm, ico, idcin, idf, iff, ifv, ilbc, image2, image2pipe, alias_pix, brender_pix, ingenient, ipmovie, ipu, ircam, iss, iv8, ivf, ivr, jacosub, jv, kux, kvag, lmlm4, loas, luodat, lrc, lvf, lxf, mca, mcc, matroska,webm, mgsts, microdvd, mjpeg, mjpeg_2000, mlp, mlv, mm, mmf, mods, moflex, mpc, mpc8, mpeg, mpegts, mpegtsraw, mpegvideo, mpjpeg, mpl2, mpsub, msf, msnwctcp, msp, mtaf, mtv, musx, mv, mvi, mxf, mxg, nc, nistsphere, nsp, nsv, nut, nuv, obu, ogg, oma, paf, alaw, mulaw, vidc, f64be, f64le, f32be, f32le, s32be, s32le, s24be, s24le, s16be, s16le, s8, u32be, u32le, u24be, u24le, u16be, u16le, u8, pjs, pmp, pp_bnk, pva, pvf, qcp, r3d, rawvideo, realtext, redspark, rl2, rm, roq, rpl, rsd, rso, rtp, rtsp, s337m, sami, sap, sbc, sbg, scc, sdp, sdr2, sds, sdx, film_cpk, ser, sga, shn, siff, simbiosis_imx, sln, smk, smjpeg, smush, sol, sox, spdif, srt, psxstr, stl, subviewer1, subviewer, sup, svag, svs, swf, tak, tedcaptions, thp, 3dostr, tiertexseq, tmv, truehd, tta, txd, tty, ty, v210, v210x, vag, vc1, vc1test, vividas, vivo, vmd, vobsub, voc, vpk, vplayer, vqf, w64, wc3movie, webm_dash_manifest, webvtt, wsaud, wsd, wsvqa, wtv, wve, xa, xbin, xmv, xvag, xwma, yop, yuv4mpegpipe, bmp_pipe, cri_pipe, dds_pipe, dpx_pipe, exr_pipe, gif_pipe, j2k_pipe, jpeg_pipe, jpegls_pipe, pam_pipe, pbm_pipe, pcx_pipe, pgmyuv_pipe, pgm_pipe, pgx_pipe, photocd_pipe, pictor_pipe, png_pipe, ppm_pipe, psd_pipe, qdraw_pipe, sgi_pipe, svg_pipe, sunrast_pipe, tiff_pipe, webp_pipe, xbm_pipe, xpm_pipe, xwd_pipe, libmodplug
info [0x55e0a6ccbf80] faad2::LibLoader - Successfully loaded FAAD2 library "libfaad.so.2" version 2.10.0
info [0x55e0a6ccbf80] SoundSourceSndFile - Disabling OGG decoding for "libsndfile-1.0.31"
info [0x55e0a6ccbf80] SoundSourceProxy - SoundSource providers for file type "3g2"
info [0x55e0a6ccbf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x55e0a6ccbf80] SoundSourceProxy - SoundSource providers for file type "3gp"
info [0x55e0a6ccbf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x55e0a6ccbf80] SoundSourceProxy - SoundSource providers for file type "aac"
info [0x55e0a6ccbf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x55e0a6ccbf80] SoundSourceProxy - SoundSource providers for file type "aiff"
info [0x55e0a6ccbf80] SoundSourceProxy - 3 (default) : "libsndfile"
info [0x55e0a6ccbf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x55e0a6ccbf80] SoundSourceProxy - SoundSource providers for file type "caf"
info [0x55e0a6ccbf80] SoundSourceProxy - 2 (lower) : "libsndfile"
info [0x55e0a6ccbf80] SoundSourceProxy - SoundSource providers for file type "flac"
info [0x55e0a6ccbf80] SoundSourceProxy - 4 (higher) : "Xiph.org libFLAC"
info [0x55e0a6ccbf80] SoundSourceProxy - 2 (lower) : "libsndfile"
info [0x55e0a6ccbf80] SoundSourceProxy - SoundSource providers for file type "it"
info [0x55e0a6ccbf80] SoundSourceProxy - 3 (default) : "MODPlug"
info [0x55e0a6ccbf80] SoundSourceProxy - SoundSource providers for file type "m4a"
info [0x55e0a6ccbf80] SoundSourceProxy - 3 (default) : "Nero FAAD2"
info [0x55e0a6ccbf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x55e0a6ccbf80] SoundSourceProxy - SoundSource providers for file type "mj2"
info [0x55e0a6ccbf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x55e0a6ccbf80] SoundSourceProxy - SoundSource providers for file type "mod"
info [0x55e0a6ccbf80] SoundSourceProxy - 3 (default) : "MODPlug"
info [0x55e0a6ccbf80] SoundSourceProxy - SoundSource providers for file type "mov"
info [0x55e0a6ccbf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x55e0a6ccbf80] SoundSourceProxy - SoundSource providers for file type "mp3"
info [0x55e0a6ccbf80] SoundSourceProxy - 3 (default) : "MAD: MPEG Audio Decoder"
info [0x55e0a6ccbf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x55e0a6ccbf80] SoundSourceProxy - SoundSource providers for file type "mp4"
info [0x55e0a6ccbf80] SoundSourceProxy - 3 (default) : "Nero FAAD2"
info [0x55e0a6ccbf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x55e0a6ccbf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x55e0a6ccbf80] SoundSourceProxy - SoundSource providers for file type "ogg"
info [0x55e0a6ccbf80] SoundSourceProxy - 4 (higher) : "Xiph.org OggVorbis"
info [0x55e0a6ccbf80] SoundSourceProxy - SoundSource providers for file type "okt"
info [0x55e0a6ccbf80] SoundSourceProxy - 3 (default) : "MODPlug"
info [0x55e0a6ccbf80] SoundSourceProxy - SoundSource providers for file type "opus"
info [0x55e0a6ccbf80] SoundSourceProxy - 4 (higher) : "Xiph.org libopusfile"
info [0x55e0a6ccbf80] SoundSourceProxy - SoundSource providers for file type "s3m"
info [0x55e0a6ccbf80] SoundSourceProxy - 3 (default) : "MODPlug"
info [0x55e0a6ccbf80] SoundSourceProxy - SoundSource providers for file type "stm"
info [0x55e0a6ccbf80] SoundSourceProxy - 3 (default) : "MODPlug"
info [0x55e0a6ccbf80] SoundSourceProxy - SoundSource providers for file type "wav"
info [0x55e0a6ccbf80] SoundSourceProxy - 3 (default) : "libsndfile"
info [0x55e0a6ccbf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x55e0a6ccbf80] SoundSourceProxy - SoundSource providers for file type "wv"
info [0x55e0a6ccbf80] SoundSourceProxy - 4 (higher) : "WavPack"
info [0x55e0a6ccbf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x55e0a6ccbf80] SoundSourceProxy - SoundSource providers for file type "xm"
info [0x55e0a6ccbf80] SoundSourceProxy - 3 (default) : "MODPlug"
info [0x55e0a6ccbf80] SettingsDAO - Failed to prepare query: Returning default value "" for "mixxx.schema.version"
info [0x55e0a6ccbf80] SettingsDAO - Failed to prepare query: Returning default value "" for "mixxx.schema.last_used_version"
info [0x55e0a6ccbf80] SettingsDAO - Failed to prepare query: Returning default value "" for "mixxx.schema.version"
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema from version 0 to version 39
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 1 : "The base schema for the Mixxx SQLITE database."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 1
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 2 : "Add a header_parsed integer column to the library to indicate when a\n      track's tags have been parsed."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 2
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 3 : "Change the location column to be a an integer. Change comment to be\n      varchar(256) and album/artist/title to be varchar(64)."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 3
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 4 : "Add file type column."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 4
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 5 : "Add needs_verification column to library hashes table."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 5
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 6 : "Added a ReplayGain Column."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 6
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 7 : "Add timesplayed and rating column. Reset header state."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 7
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 8 : "Added iTunes tables"
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 8
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 9 : "Tables for Traktor library feature"
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 9
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 10 : "Playlist and crate locks"
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 10
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 11 : "Tables for Rhythmbox library feature"
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 11
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 12 : "Add beats column to library table."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 12
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 13 : "Add position column to Rhythmbox, iTunes, and Traktor playlist tables."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 13
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 14 : "Add composer column to library table."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 14
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 15 : "Add datetime_added to playlists tracks."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 15
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 16 : "Add track analysis table."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 16
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 17 : "Add columns for BPM lock and a sub-version string for beats."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 17
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 18 : "Add keys column to library table."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 18
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 19 : "Add key_id column to library table for caching the global key. Default to\n      INVALID."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 19
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 20 : "Crates in AutoDJ queue (for automated random-track selection)."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 20
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 21 : "Add grouping and album_artist column to library table."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 21
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 22 : "Add grouping and album_artist column to itunes_library table."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 22
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 23 : "Add directories table"
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 23
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 24 : "Add cover art support. Default source is UNKNOWN and default type is NONE."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 24
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 25 : "Add full replay gain support including peak amplitude. The default\n      value for the peak amplitude is \"undefined\", represented by any\n      negative value. The internal constant for \"undefined\" is -1.0."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 25
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 26 : "Add new column \"tracktotal\" column that stores the total number of\n      tracks as a string. The total number of tracks will be reloaded\n      from the corresponding file upon first access when encountering\n      the default value."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 26
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 27 : "Add cue color support. Default color is #FF0000."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 27
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 28 : "Reset replay gain info for all FLAC files after fixing a decoding bug in version 2.1.0."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 28
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 29 : "This was used in the development of 2.3 to track whether cues were placed\n      manually or automatically. However, this turned out to be unnecessary.\n      This version is left as a placeholder so users who were using the master\n      branch will have their database updated correctly for the subsequent\n      schema change."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 29
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 30 : "This was used in the development of 2.3 for permanent Rekordbox\n      library feature tables, which have since been replaced by\n      dynamic temporary tables, similar to the Serato library\n      feature."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 30
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 31 : "Add track color support."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 31
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 32 : "Convert the PredefinedColor ID to the actual RGB value."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 32
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 33 : "Add cover art image digest and (background) color"
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 33
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 34 : "Add indexes for tracks in playlists and crates"
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 34
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 35 : "Add last_played_at column to library table"
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 35
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 36 : "Populate last_played_at column in library table from play history"
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 36
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 37 : "Add source_synchronized_ms column to library table"
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 37
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 38 : "Fix 0/NULL issue after upgrade to schema version 37."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 38
info [0x55e0a6ccbf80] SchemaManager - Upgrading database schema to version 39 : "Replace file type \"aif\" with \"aiff\"."
info [0x55e0a6ccbf80] SchemaManager - Upgraded database schema to version 39
info [0x55e0a6ccbf80] GlobalTrackCache - Creating instance
info [0x55e0a6ccbf80] TrackCollection - Connecting database
info [0x55e0a6ccbf80] TrackCollectionManager - External collections are disabled in test mode
info [0x55e0a6ccbf80] TrackCollectionManager - Library scanner is disabled in test mode
ALSA lib pcm_dsnoop.c:601:(snd_pcm_dsnoop_open) unable to open slave
ALSA lib pcm_dmix.c:1032:(snd_pcm_dmix_open) unable to open slave
ALSA lib pcm.c:2664:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2664:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2664:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm_oss.c:397:(_snd_pcm_oss_open) Cannot open device /dev/dsp
ALSA lib pcm_oss.c:397:(_snd_pcm_oss_open) Cannot open device /dev/dsp
ALSA lib pcm_a52.c:1001:(_snd_pcm_a52_open) a52 is only for playback
ALSA lib confmisc.c:160:(snd_config_get_card) Invalid field card
ALSA lib pcm_usb_stream.c:482:(_snd_pcm_usb_stream_open) Invalid card 'card'
ALSA lib confmisc.c:160:(snd_config_get_card) Invalid field card
ALSA lib pcm_usb_stream.c:482:(_snd_pcm_usb_stream_open) Invalid card 'card'
ALSA lib pcm_dmix.c:1032:(snd_pcm_dmix_open) unable to open slave
warning [0x55e0a6ccbf80] ControlObject "[Library]" "key_notation" already created
critical [0x55e0a6ccbf80] DEBUG ASSERT: "!"pCreatorCO != nullptr, ControlObject already created"" in function static QSharedPointer<ControlDoublePrivate> ControlDoublePrivate::getControl(const ConfigKey&, ControlFlags, ControlObject*, bool, bool, bool, double) at /home/jan/Projects/mixxx/src/control/control.cpp:158

763/764 Test #491: PlayerManagerTest.UnEjectInvalidTrackIdTest ................................................***Exception: Interrupt  0.33 sec
QML debugging is enabled. Only use this in a safe environment.
Note: Google Test filter = PlayerManagerTest.UnEjectInvalidTrackIdTest
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from PlayerManagerTest
[ RUN      ] PlayerManagerTest.UnEjectInvalidTrackIdTest
info [0x561aa396cf80] DbConnection - Available drivers for database connections: QList("QIBASE", "QSQLITE", "QMARIADB", "QMYSQL", "QODBC", "QPSQL")
info [0x561aa396cf80] DbConnectionPool - Cloned thread-local database connection "MIXXX-1" QSqlDatabase(driver="QSQLITE", database="file:///tmp/mixxx-test-wrzfeo/mixxxdb.sqlite?mode=memory&cache=shared", host="", port=-1, user="mixxx", open=true)
info [0x561aa396cf80] SoundSourceFFmpeg - Disabling untested input formats: aa, aax, ac3, ace, acm, act, adf, adp, ads, adx, aea, afc, aix, alp, amr, amrnb, amrwb, anm, apc, ape, apm, apng, aptx, aptx_hd, aqtitle, argo_asf, argo_brp, asf, asf_o, ass, ast, au, av1, avi, avisynth, avr, avs, avs2, avs3, bethsoftvid, bfi, bin, bink, binka, bit, bmv, bfstm, brstm, boa, c93, caf, cavsvideo, cdg, cdxl, cine, codec2, codec2raw, concat, dash, data, daud, dcstr, derf, dfa, dhav, dirac, dnxhd, dsf, dsicin, dss, dts, dtshd, dv, dvbsub, dvbtxt, dxa, ea, ea_cdata, eac3, epaf, ffmetadata, filmstrip, fits, flac, flic, flv, live_flv, 4xm, frm, fsb, fwse, g722, g723_1, g726, g726le, g729, gdv, genh, gif, gsm, gxf, h261, h263, h264, hca, hcom, hevc, hls, hnm, ico, idcin, idf, iff, ifv, ilbc, image2, image2pipe, alias_pix, brender_pix, ingenient, ipmovie, ipu, ircam, iss, iv8, ivf, ivr, jacosub, jv, kux, kvag, lmlm4, loas, luodat, lrc, lvf, lxf, mca, mcc, matroska,webm, mgsts, microdvd, mjpeg, mjpeg_2000, mlp, mlv, mm, mmf, mods, moflex, mpc, mpc8, mpeg, mpegts, mpegtsraw, mpegvideo, mpjpeg, mpl2, mpsub, msf, msnwctcp, msp, mtaf, mtv, musx, mv, mvi, mxf, mxg, nc, nistsphere, nsp, nsv, nut, nuv, obu, ogg, oma, paf, alaw, mulaw, vidc, f64be, f64le, f32be, f32le, s32be, s32le, s24be, s24le, s16be, s16le, s8, u32be, u32le, u24be, u24le, u16be, u16le, u8, pjs, pmp, pp_bnk, pva, pvf, qcp, r3d, rawvideo, realtext, redspark, rl2, rm, roq, rpl, rsd, rso, rtp, rtsp, s337m, sami, sap, sbc, sbg, scc, sdp, sdr2, sds, sdx, film_cpk, ser, sga, shn, siff, simbiosis_imx, sln, smk, smjpeg, smush, sol, sox, spdif, srt, psxstr, stl, subviewer1, subviewer, sup, svag, svs, swf, tak, tedcaptions, thp, 3dostr, tiertexseq, tmv, truehd, tta, txd, tty, ty, v210, v210x, vag, vc1, vc1test, vividas, vivo, vmd, vobsub, voc, vpk, vplayer, vqf, w64, wc3movie, webm_dash_manifest, webvtt, wsaud, wsd, wsvqa, wtv, wve, xa, xbin, xmv, xvag, xwma, yop, yuv4mpegpipe, bmp_pipe, cri_pipe, dds_pipe, dpx_pipe, exr_pipe, gif_pipe, j2k_pipe, jpeg_pipe, jpegls_pipe, pam_pipe, pbm_pipe, pcx_pipe, pgmyuv_pipe, pgm_pipe, pgx_pipe, photocd_pipe, pictor_pipe, png_pipe, ppm_pipe, psd_pipe, qdraw_pipe, sgi_pipe, svg_pipe, sunrast_pipe, tiff_pipe, webp_pipe, xbm_pipe, xpm_pipe, xwd_pipe, libmodplug
info [0x561aa396cf80] faad2::LibLoader - Successfully loaded FAAD2 library "libfaad.so.2" version 2.10.0
info [0x561aa396cf80] SoundSourceSndFile - Disabling OGG decoding for "libsndfile-1.0.31"
info [0x561aa396cf80] SoundSourceProxy - SoundSource providers for file type "3g2"
info [0x561aa396cf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x561aa396cf80] SoundSourceProxy - SoundSource providers for file type "3gp"
info [0x561aa396cf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x561aa396cf80] SoundSourceProxy - SoundSource providers for file type "aac"
info [0x561aa396cf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x561aa396cf80] SoundSourceProxy - SoundSource providers for file type "aiff"
info [0x561aa396cf80] SoundSourceProxy - 3 (default) : "libsndfile"
info [0x561aa396cf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x561aa396cf80] SoundSourceProxy - SoundSource providers for file type "caf"
info [0x561aa396cf80] SoundSourceProxy - 2 (lower) : "libsndfile"
info [0x561aa396cf80] SoundSourceProxy - SoundSource providers for file type "flac"
info [0x561aa396cf80] SoundSourceProxy - 4 (higher) : "Xiph.org libFLAC"
info [0x561aa396cf80] SoundSourceProxy - 2 (lower) : "libsndfile"
info [0x561aa396cf80] SoundSourceProxy - SoundSource providers for file type "it"
info [0x561aa396cf80] SoundSourceProxy - 3 (default) : "MODPlug"
info [0x561aa396cf80] SoundSourceProxy - SoundSource providers for file type "m4a"
info [0x561aa396cf80] SoundSourceProxy - 3 (default) : "Nero FAAD2"
info [0x561aa396cf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x561aa396cf80] SoundSourceProxy - SoundSource providers for file type "mj2"
info [0x561aa396cf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x561aa396cf80] SoundSourceProxy - SoundSource providers for file type "mod"
info [0x561aa396cf80] SoundSourceProxy - 3 (default) : "MODPlug"
info [0x561aa396cf80] SoundSourceProxy - SoundSource providers for file type "mov"
info [0x561aa396cf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x561aa396cf80] SoundSourceProxy - SoundSource providers for file type "mp3"
info [0x561aa396cf80] SoundSourceProxy - 3 (default) : "MAD: MPEG Audio Decoder"
info [0x561aa396cf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x561aa396cf80] SoundSourceProxy - SoundSource providers for file type "mp4"
info [0x561aa396cf80] SoundSourceProxy - 3 (default) : "Nero FAAD2"
info [0x561aa396cf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x561aa396cf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x561aa396cf80] SoundSourceProxy - SoundSource providers for file type "ogg"
info [0x561aa396cf80] SoundSourceProxy - 4 (higher) : "Xiph.org OggVorbis"
info [0x561aa396cf80] SoundSourceProxy - SoundSource providers for file type "okt"
info [0x561aa396cf80] SoundSourceProxy - 3 (default) : "MODPlug"
info [0x561aa396cf80] SoundSourceProxy - SoundSource providers for file type "opus"
info [0x561aa396cf80] SoundSourceProxy - 4 (higher) : "Xiph.org libopusfile"
info [0x561aa396cf80] SoundSourceProxy - SoundSource providers for file type "s3m"
info [0x561aa396cf80] SoundSourceProxy - 3 (default) : "MODPlug"
info [0x561aa396cf80] SoundSourceProxy - SoundSource providers for file type "stm"
info [0x561aa396cf80] SoundSourceProxy - 3 (default) : "MODPlug"
info [0x561aa396cf80] SoundSourceProxy - SoundSource providers for file type "wav"
info [0x561aa396cf80] SoundSourceProxy - 3 (default) : "libsndfile"
info [0x561aa396cf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x561aa396cf80] SoundSourceProxy - SoundSource providers for file type "wv"
info [0x561aa396cf80] SoundSourceProxy - 4 (higher) : "WavPack"
info [0x561aa396cf80] SoundSourceProxy - 1 (lowest) : "FFmpeg"
info [0x561aa396cf80] SoundSourceProxy - SoundSource providers for file type "xm"
info [0x561aa396cf80] SoundSourceProxy - 3 (default) : "MODPlug"
info [0x561aa396cf80] SettingsDAO - Failed to prepare query: Returning default value "" for "mixxx.schema.version"
info [0x561aa396cf80] SettingsDAO - Failed to prepare query: Returning default value "" for "mixxx.schema.last_used_version"
info [0x561aa396cf80] SettingsDAO - Failed to prepare query: Returning default value "" for "mixxx.schema.version"
info [0x561aa396cf80] SchemaManager - Upgrading database schema from version 0 to version 39
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 1 : "The base schema for the Mixxx SQLITE database."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 1
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 2 : "Add a header_parsed integer column to the library to indicate when a\n      track's tags have been parsed."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 2
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 3 : "Change the location column to be a an integer. Change comment to be\n      varchar(256) and album/artist/title to be varchar(64)."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 3
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 4 : "Add file type column."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 4
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 5 : "Add needs_verification column to library hashes table."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 5
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 6 : "Added a ReplayGain Column."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 6
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 7 : "Add timesplayed and rating column. Reset header state."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 7
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 8 : "Added iTunes tables"
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 8
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 9 : "Tables for Traktor library feature"
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 9
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 10 : "Playlist and crate locks"
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 10
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 11 : "Tables for Rhythmbox library feature"
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 11
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 12 : "Add beats column to library table."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 12
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 13 : "Add position column to Rhythmbox, iTunes, and Traktor playlist tables."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 13
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 14 : "Add composer column to library table."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 14
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 15 : "Add datetime_added to playlists tracks."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 15
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 16 : "Add track analysis table."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 16
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 17 : "Add columns for BPM lock and a sub-version string for beats."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 17
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 18 : "Add keys column to library table."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 18
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 19 : "Add key_id column to library table for caching the global key. Default to\n      INVALID."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 19
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 20 : "Crates in AutoDJ queue (for automated random-track selection)."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 20
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 21 : "Add grouping and album_artist column to library table."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 21
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 22 : "Add grouping and album_artist column to itunes_library table."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 22
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 23 : "Add directories table"
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 23
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 24 : "Add cover art support. Default source is UNKNOWN and default type is NONE."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 24
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 25 : "Add full replay gain support including peak amplitude. The default\n      value for the peak amplitude is \"undefined\", represented by any\n      negative value. The internal constant for \"undefined\" is -1.0."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 25
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 26 : "Add new column \"tracktotal\" column that stores the total number of\n      tracks as a string. The total number of tracks will be reloaded\n      from the corresponding file upon first access when encountering\n      the default value."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 26
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 27 : "Add cue color support. Default color is #FF0000."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 27
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 28 : "Reset replay gain info for all FLAC files after fixing a decoding bug in version 2.1.0."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 28
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 29 : "This was used in the development of 2.3 to track whether cues were placed\n      manually or automatically. However, this turned out to be unnecessary.\n      This version is left as a placeholder so users who were using the master\n      branch will have their database updated correctly for the subsequent\n      schema change."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 29
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 30 : "This was used in the development of 2.3 for permanent Rekordbox\n      library feature tables, which have since been replaced by\n      dynamic temporary tables, similar to the Serato library\n      feature."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 30
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 31 : "Add track color support."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 31
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 32 : "Convert the PredefinedColor ID to the actual RGB value."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 32
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 33 : "Add cover art image digest and (background) color"
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 33
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 34 : "Add indexes for tracks in playlists and crates"
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 34
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 35 : "Add last_played_at column to library table"
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 35
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 36 : "Populate last_played_at column in library table from play history"
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 36
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 37 : "Add source_synchronized_ms column to library table"
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 37
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 38 : "Fix 0/NULL issue after upgrade to schema version 37."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 38
info [0x561aa396cf80] SchemaManager - Upgrading database schema to version 39 : "Replace file type \"aif\" with \"aiff\"."
info [0x561aa396cf80] SchemaManager - Upgraded database schema to version 39
info [0x561aa396cf80] GlobalTrackCache - Creating instance
info [0x561aa396cf80] TrackCollection - Connecting database
info [0x561aa396cf80] TrackCollectionManager - External collections are disabled in test mode
info [0x561aa396cf80] TrackCollectionManager - Library scanner is disabled in test mode
ALSA lib pcm_dsnoop.c:601:(snd_pcm_dsnoop_open) unable to open slave
ALSA lib pcm_dmix.c:1032:(snd_pcm_dmix_open) unable to open slave
ALSA lib pcm.c:2664:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2664:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2664:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm_oss.c:397:(_snd_pcm_oss_open) Cannot open device /dev/dsp
ALSA lib pcm_oss.c:397:(_snd_pcm_oss_open) Cannot open device /dev/dsp
ALSA lib pcm_a52.c:1001:(_snd_pcm_a52_open) a52 is only for playback
ALSA lib confmisc.c:160:(snd_config_get_card) Invalid field card
ALSA lib pcm_usb_stream.c:482:(_snd_pcm_usb_stream_open) Invalid card 'card'
ALSA lib confmisc.c:160:(snd_config_get_card) Invalid field card
ALSA lib pcm_usb_stream.c:482:(_snd_pcm_usb_stream_open) Invalid card 'card'
ALSA lib pcm_dmix.c:1032:(snd_pcm_dmix_open) unable to open slave
warning [0x561aa396cf80] ControlObject "[Library]" "key_notation" already created
critical [0x561aa396cf80] DEBUG ASSERT: "!"pCreatorCO != nullptr, ControlObject already created"" in function static QSharedPointer<ControlDoublePrivate> ControlDoublePrivate::getControl(const ConfigKey&, ControlFlags, ControlObject*, bool, bool, bool, double) at /home/jan/Projects/mixxx/src/control/control.cpp:158

764/764 Test #686: SoundSourceProxyTest.skipAndRead ...........................................................   Passed   15.72 sec

99% tests passed, 3 tests failed out of 751

Total Test time (real) =  15.76 sec

The following tests did not run:
	168 - CoreServicesTest.TestInitialization (Disabled)
	239 - EngineBufferE2ETest.SoundTouchToggleTest (Disabled)
	240 - EngineBufferE2ETest.RubberbandToggleTest (Disabled)
	241 - EngineBufferE2ETest.KeylockReverseTest (Disabled)
	647 - SoftTakeoverTest.SuperFastNotSame (Disabled)
	654 - SoftTakeoverTest.PrevNearLess_NewFarLess_Late (Disabled)
	655 - SoftTakeoverTest.PrevNearLess_NewFarMore_Late (Disabled)
	662 - SoftTakeoverTest.PrevNearMore_NewFarLess_Late (Disabled)
	663 - SoftTakeoverTest.PrevNearMore_NewFarMore_Late (Disabled)
	666 - SoftTakeoverTest.PrevFarLess_NewFarLess_Soon (Disabled)
	671 - SoftTakeoverTest.PrevFarLess_NewFarMore_Late (Disabled)
	675 - SoftTakeoverTest.PrevFarMore_NewFarMore_Soon (Disabled)
	678 - SoftTakeoverTest.PrevFarMore_NewFarLess_Late (Disabled)

The following tests FAILED:
	489 - PlayerManagerTest.UnEjectTest (INTERRUPT)
	490 - PlayerManagerTest.UnEjectReplaceTrackTest (INTERRUPT)
	491 - PlayerManagerTest.UnEjectInvalidTrackIdTest (INTERRUPT)
Errors while running CTest

@ywwg
Copy link
Member Author

ywwg commented Feb 10, 2022

looks like I'm double-creating a Library.

@ywwg
Copy link
Member Author

ywwg commented Feb 10, 2022

That was unpleasant -- it would be nice if we could create a test-friendly coreservices mode, that would simplify a lot of this test.

@ywwg
Copy link
Member Author

ywwg commented Feb 10, 2022

@daschuer can you retest with qt6 and if it still crashes can you build with cmake .. -DCMAKE_BUILD_TYPE=Debug -DOPTIMIZE=off and post a stack trace at the point of the crash?

@Holzhaus
Copy link
Member

@daschuer can you retest with qt6 and if it still crashes can you build with cmake .. -DCMAKE_BUILD_TYPE=Debug -DOPTIMIZE=off and post a stack trace at the point of the crash?

I'm not @daschuer but here's your stack trace:

>>> bt
#0  0x00007ffff281fd22 in raise () at /usr/lib/libc.so.6
#1  0x00007ffff2809862 in abort () at /usr/lib/libc.so.6
#2  0x00007ffff2bca802 in __gnu_cxx::__verbose_terminate_handler() () at /build/gcc/src/gcc/libstdc++-v3/libsupc++/vterminate.cc:95
#3  0x00007ffff2bd6c8a in __cxxabiv1::__terminate(void (*)()) (handler=<optimized out>) at /build/gcc/src/gcc/libstdc++-v3/libsupc++/eh_terminate.cc:48
#4  0x00007ffff2bd6cf7 in std::terminate() () at /build/gcc/src/gcc/libstdc++-v3/libsupc++/eh_terminate.cc:58
#5  0x00007ffff2bd6f8e in __cxxabiv1::__cxa_throw(void*, std::type_info*, void (*)(void*)) (obj=<optimized out>, tinfo=0x7ffff2d37e78 <typeinfo for std::bad_alloc>, dest=0x7ffff2bd5200 <std::bad_alloc::~bad_alloc()>) at /build/gcc/src/gcc/libstdc++-v3/libsupc++/eh_throw.cc:95
#6  0x00007ffff2def057 in qTerminate() () at /usr/lib/libQt6Core.so.6
#7  0x0000555555b97654 in QVarLengthArray<ChannelHandleMap<EngineEffectChain::ChannelStatus>, 256ll>::reallocate(long long, long long) (this=0x7fffbb5a5088, asize=1467686481, aalloc=1467686481) at /usr/include/qt6/QtCore/qvarlengtharray.h:511
#8  0x0000555555b9693f in QVarLengthArray<ChannelHandleMap<EngineEffectChain::ChannelStatus>, 256ll>::resize(long long) (this=0x7fffbb5a5088, asize=1467686481) at /usr/include/qt6/QtCore/qvarlengtharray.h:420
#9  0x0000555555b9608a in ChannelHandleMap<ChannelHandleMap<EngineEffectChain::ChannelStatus> >::maybeExpand(int) (this=0x7fffbb5a5088, iSize=1467686481) at /home/jan/Projects/mixxx/src/engine/channelhandle.h:231
#10 0x0000555555b95644 in ChannelHandleMap<ChannelHandleMap<EngineEffectChain::ChannelStatus> >::operator[](ChannelHandle const&) (this=0x7fffbb5a5088, handle=...) at /home/jan/Projects/mixxx/src/engine/channelhandle.h:202
#11 0x0000555555b9436b in EngineEffectChain::enableForInputChannel(ChannelHandle const*, std::array<ChannelHandleMap<EffectState*>, 4ul>*) (this=0x7fffbb5a5010, inputHandle=0x555556e302a0, statesForEffectsInChain=0x5555574bc840) at /home/jan/Projects/mixxx/src/engine/effects/engineeffectchain.cpp:154
#12 0x0000555555b942c8 in EngineEffectChain::processEffectsRequest(EffectsRequest&, MessagePipe<EffectsResponse, EffectsRequest*>*) (this=0x7fffbb5a5010, message=..., pResponsePipe=0x55555712e5e0) at /home/jan/Projects/mixxx/src/engine/effects/engineeffectchain.cpp:128
#13 0x0000555555b98ba1 in EngineEffectsManager::onCallbackStart() (this=0x55555712e550) at /home/jan/Projects/mixxx/src/engine/effects/engineeffectsmanager.cpp:49
#14 0x0000555555baf4b9 in EngineMaster::process(int) (this=0x555557141550, iBufferSize=1024) at /home/jan/Projects/mixxx/src/engine/enginemaster.cpp:406
#15 0x000055555593777a in PlayerManagerTest_UnEjectTest_Test::TestBody() (this=0x555556de0880) at /home/jan/Projects/mixxx/src/test/playermanagertest.cpp:131
#16 0x000055555627f541 in testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) (object=0x555556de0880, method=&virtual testing::Test::TestBody(), location=0x55555667bfc3 "the test body") at /home/jan/Projects/mixxx/lib/googletest/googletest/src/gtest.cc:2665
#17 0x00005555562558f6 in testing::Test::Run() (this=0x555556de0880) at /home/jan/Projects/mixxx/lib/googletest/googletest/src/gtest.cc:2682
#18 0x000055555625631a in testing::TestInfo::Run() (this=0x555556cbb570) at /home/jan/Projects/mixxx/lib/googletest/googletest/src/gtest.cc:2861
#19 0x0000555556256bcd in testing::TestSuite::Run() (this=0x555556cbb750) at /home/jan/Projects/mixxx/lib/googletest/googletest/src/gtest.cc:3015
#20 0x000055555626618d in testing::internal::UnitTestImpl::RunAllTests() (this=0x555556c7db20) at /home/jan/Projects/mixxx/lib/googletest/googletest/src/gtest.cc:5855
#21 0x000055555628068a in testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) (object=0x555556c7db20, method=(bool (testing::internal::UnitTestImpl::*)(testing::internal::UnitTestImpl * const)) 0x555556265d9c <testing::internal::UnitTestImpl::RunAllTests()>, location=0x55555667ca28 "auxiliary test code (environments or event listeners)") at /home/jan/Projects/mixxx/lib/googletest/googletest/src/gtest.cc:2665
#22 0x00005555562649cd in testing::UnitTest::Run() (this=0x555556bccac0 <testing::UnitTest::GetInstance()::instance>) at /home/jan/Projects/mixxx/lib/googletest/googletest/src/gtest.cc:5438
#23 0x00005555559132e5 in RUN_ALL_TESTS() () at /home/jan/Projects/mixxx/lib/googletest/googletest/include/gtest/gtest.h:2490
#24 0x000055555591321b in main(int, char**) (argc=1, argv=0x7fffffffe408) at /home/jan/Projects/mixxx/src/test/main.cpp:34

@ywwg
Copy link
Member Author

ywwg commented Feb 11, 2022

Try again -- and if it fails again can you print out the values of m_data.size() and iSize at the crash point? those values should be available. And also too, if you know the exact version of qt6 you have I can be more sure about which assertion is triggering the error. But I think that change might fix it.

@ywwg
Copy link
Member Author

ywwg commented Feb 11, 2022


SUMMARY: ThreadSanitizer: data race (/home/owen/src/github/mixxx/cbuild/mixxx-test+0x56eb81) in __interceptor_realloc
==================
==545908==ERROR: ThreadSanitizer: requested allocation size 0x41000000000 exceeds maximum supported size of 0x10000000000
    #0 malloc <null> (mixxx-test+0x56e85d)
    #1 QVarLengthArray<ChannelHandleMap<EngineEffectChain::ChannelStatus>, 256ll>::reallocate(long long, long long) /usr/include/x86_64-linux-gnu/qt6/QtCore/qvarlengtharray.h:510:47 (mixxx-test+0xb6f98a)
    #2 QVarLengthArray<ChannelHandleMap<EngineEffectChain::ChannelStatus>, 256ll>::resize(long long) /usr/include/x86_64-linux-gnu/qt6/QtCore/qvarlengtharray.h:420:3 (mixxx-test+0xb6c704)
    #3 ChannelHandleMap<ChannelHandleMap<EngineEffectChain::ChannelStatus> >::maybeExpand(int) /home/owen/src/github/mixxx/src/engine/channelhandle.h:231:24 (mixxx-test+0xb6c704)
    #4 ChannelHandleMap<ChannelHandleMap<EngineEffectChain::ChannelStatus> >::operator[](ChannelHandle const&) /home/owen/src/github/mixxx/src/engine/channelhandle.h:202:9 (mixxx-test+0xb6c704)
    #5 EngineEffectChain::enableForInputChannel(ChannelHandle const*, std::array<ChannelHandleMap<EffectState*>, 4ul>*) /home/owen/src/github/mixxx/src/engine/effects/engineeffectchain.cpp:154:23 (mixxx-test+0xb6c704)
    #6 EngineEffectChain::processEffectsRequest(EffectsRequest&, MessagePipe<EffectsResponse, EffectsRequest*>*) /home/owen/src/github/mixxx/src/engine/effects/engineeffectchain.cpp:128:28 (mixxx-test+0xb6c283)
    #7 EngineEffectsManager::onCallbackStart() /home/owen/src/github/mixxx/src/engine/effects/engineeffectsmanager.cpp:49:48 (mixxx-test+0xb71691)
    #8 EngineMaster::process(int) /home/owen/src/github/mixxx/src/engine/enginemaster.cpp:406:34 (mixxx-test+0xb8fe56)
    #9 PlayerManagerTest_UnEjectTest_Test::TestBody() /home/owen/src/github/mixxx/src/test/playermanagertest.cpp:132:16 (mixxx-test+0x8d116d)
    #10 void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) /home/owen/src/github/mixxx/lib/googletest/googletest/src/gtest.cc:2607:10 (mixxx-test+0x12ef0a5)
    #11 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) /home/owen/src/github/mixxx/lib/googletest/googletest/src/gtest.cc:2643:14 (mixxx-test+0x12ef0a5)
    #12 __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16 (libc.so.6+0x2dfcf)

==545908==HINT: if you don't care about these errors you may set allocator_may_return_null=1
SUMMARY: ThreadSanitizer: allocation-size-too-big (/home/owen/src/github/mixxx/cbuild/mixxx-test+0x56e85d) in malloc

@ywwg
Copy link
Member Author

ywwg commented Feb 11, 2022

it looks like some invalid effect request is getting created with a bad channelhandle.

@ywwg
Copy link
Member Author

ywwg commented Feb 11, 2022

asan:

==572573==ERROR: AddressSanitizer: heap-use-after-free on address 0x6150002718e0 at pc 0x00000152a2ad bp 0x7ffc470b7490 sp 0x7ffc470b7488
READ of size 4 at 0x6150002718e0 thread T0
    #0 0x152a2ac in ChannelHandle::handle() const /home/owen/src/github/mixxx/src/engine/channelhandle.h:42:16
    #1 0x152a2ac in operator<<(QDebug, ChannelHandle const&) /home/owen/src/github/mixxx/src/engine/channelhandle.h:76:37
    #2 0x152a2ac in EngineEffectChain::processEffectsRequest(EffectsRequest&, MessagePipe<EffectsResponse, EffectsRequest*>*) /home/owen/src/github/mixxx/src/engine/effects/engineeffectchain.cpp:126:22
    #3 0x1536230 in EngineEffectsManager::onCallbackStart() /home/owen/src/github/mixxx/src/engine/effects/engineeffectsmanager.cpp:49:48
    #4 0x157ff03 in EngineMaster::process(int) /home/owen/src/github/mixxx/src/engine/enginemaster.cpp:406:34
    #5 0xe96437 in PlayerManagerTest_UnEjectTest_Test::TestBody() /home/owen/src/github/mixxx/src/test/playermanagertest.cpp:132:16
    #6 0x26e92f5 in void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) /home/owen/src/github/mixxx/lib/googletest/googletest/src/gtest.cc:2607:10
    #7 0x26e92f5 in void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) /home/owen/src/github/mixxx/lib/googletest/googletest/src/gtest.cc:2643:14
    #8 0x26bedaf in testing::Test::Run() /home/owen/src/github/mixxx/lib/googletest/googletest/src/gtest.cc:2682:5
    #9 0x26c0aa4 in testing::TestInfo::Run() /home/owen/src/github/mixxx/lib/googletest/googletest/src/gtest.cc:2861:11
    #10 0x26c1370 in testing::TestSuite::Run() /home/owen/src/github/mixxx/lib/googletest/googletest/src/gtest.cc:3015:28
    #11 0x26d3421 in testing::internal::UnitTestImpl::RunAllTests() /home/owen/src/github/mixxx/lib/googletest/googletest/src/gtest.cc:5855:44
    #12 0x26ea1b5 in bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) /home/owen/src/github/mixxx/lib/googletest/googletest/src/gtest.cc:2607:10
    #13 0x26ea1b5 in bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) /home/owen/src/github/mixxx/lib/googletest/googletest/src/gtest.cc:2643:14
    #14 0x26d28bb in testing::UnitTest::Run() /home/owen/src/github/mixxx/lib/googletest/googletest/src/gtest.cc:5438:10
    #15 0xe3b7f5 in RUN_ALL_TESTS() /home/owen/src/github/mixxx/lib/googletest/googletest/include/gtest/gtest.h:2490:46
    #16 0xe3b7f5 in main /home/owen/src/github/mixxx/src/test/main.cpp:34:16
    #17 0x7f4ea133afcf in __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16
    #18 0x7f4ea133b07c in __libc_start_main csu/../csu/libc-start.c:409:3
    #19 0x5eaa34 in _start (/home/owen/src/github/mixxx/cbuild/mixxx-test+0x5eaa34)

0x6150002718e0 is located 224 bytes inside of 512-byte region [0x615000271800,0x615000271a00)
freed by thread T0 here:
    #0 0x69990d in operator delete[](void*) (/home/owen/src/github/mixxx/cbuild/mixxx-test+0x69990d)
    #1 0x1375b6d in QHashPrivate::Span<QHashPrivate::Node<ChannelHandleAndGroup, QHashDummyValue> >::freeData() /usr/include/x86_64-linux-gnu/qt6/QtCore/qhash.h:328:13

previously allocated by thread T0 here:
    #0 0x6990bd in operator new[](unsigned long) (/home/owen/src/github/mixxx/cbuild/mixxx-test+0x6990bd)
    #1 0x137b317 in QHashPrivate::Span<QHashPrivate::Node<ChannelHandleAndGroup, QHashDummyValue> >::addStorage() /usr/include/x86_64-linux-gnu/qt6/QtCore/qhash.h:435:29

SUMMARY: AddressSanitizer: heap-use-after-free /home/owen/src/github/mixxx/src/engine/channelhandle.h:42:16 in ChannelHandle::handle() const
Shadow bytes around the buggy address:
  0x0c2a800462c0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c2a800462d0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c2a800462e0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c2a800462f0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c2a80046300: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
=>0x0c2a80046310: fd fd fd fd fd fd fd fd fd fd fd fd[fd]fd fd fd
  0x0c2a80046320: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c2a80046330: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c2a80046340: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c2a80046350: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c2a80046360: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==572573==ABORTING

@ywwg
Copy link
Member Author

ywwg commented Feb 11, 2022

ok so we are passing around pointers to channel handles, and I believe those pointers become invalid -- perhaps due to them being pointers inside a QVarLengthArray

@ywwg
Copy link
Member Author

ywwg commented Feb 11, 2022

The Bad Line: https://github.com/mixxxdj/mixxx/blob/main/src/effects/effectchain.cpp#L397

this address becomes invalid

@uklotzde
Copy link
Contributor

The Bad Line: https://github.com/mixxxdj/mixxx/blob/main/src/effects/effectchain.cpp#L397

this address becomes invalid

I agree that this code is bad. But it does not take the address of a temporary, that's not true. It takes the address of a reference. If this is safe or not depends on the outer context.

@Be-ing
Copy link
Contributor

Be-ing commented Feb 12, 2022

the outer context

My suspicion is that something is awry with the way EngineChannels are constructed in the test environment.

@uklotzde
Copy link
Contributor

My suspicion is that something is awry with the way EngineChannels are constructed in the test environment.

@be I checked the effects and ChannelHandle code. This is all a huge, dangerous mess and probably works simply by chance. Will try to fix it.

@ywwg
Copy link
Member Author

ywwg commented Feb 12, 2022

My suspicion is that something is awry with the way EngineChannels are constructed in the test environment.

that could well be the case but I've been checking against coreservices and can't find anything different yet

src/mixer/baseplayer.h Outdated Show resolved Hide resolved
src/mixer/playermanager.h Outdated Show resolved Hide resolved
src/mixer/basetrackplayer.cpp Outdated Show resolved Hide resolved
@uklotzde
Copy link
Contributor

Running the test repeatedly with #4675 applied always succeeded when built with Qt 6.

@ywwg
Copy link
Member Author

ywwg commented Feb 14, 2022

with #4672 the test crash should be fixed

@ywwg
Copy link
Member Author

ywwg commented Feb 14, 2022

ah sorry a bunch of debug crap snuck in

When ejecting a track, save a pointer to the ejected track.  If the user presses eject on an empty track in any deck or sampler, the saved track is loaded.

The track is loaded fresh, not as a "Deck clone" operation.

This enables a sort of "eject undo" as well as "track stashing".   It requires no changes to controller configs.

This required a refactor of the eject code to remove it from the EngineBuffer.  Tests still pass. Hand-testing works.
Updated test to exercise the library lookup
Copy link
Contributor

@uklotzde uklotzde left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code looks reasonable so far.

@daschuer I didn't test it and also didn't follow the discussions about this feature closely. That's why I won't press Merge myself.

@daschuer
Copy link
Member

I did a brief test and it is still working. Thank you very much.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
build changelog This PR should be included in the changelog code quality
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants