summaryrefslogtreecommitdiffstats
path: root/src/library/library.cpp
diff options
context:
space:
mode:
authorUwe Klotz <uklotz@mixxx.org>2018-02-23 00:39:32 +0100
committerUwe Klotz <uklotz@mixxx.org>2018-02-23 00:49:27 +0100
commit6c19f05560e33cbff2ba9414028471ee9e70bc2a (patch)
tree4378319451f626a452f9d35ceb36b683399b92d9 /src/library/library.cpp
parentb6e2f63ec5b6471173ce68c8fde48043c1528c23 (diff)
Do not delete shared track pointers until expired/released
Diffstat (limited to 'src/library/library.cpp')
-rw-r--r--src/library/library.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/library/library.cpp b/src/library/library.cpp
index 8cdd1a02ed..409c4c2975 100644
--- a/src/library/library.cpp
+++ b/src/library/library.cpp
@@ -422,7 +422,9 @@ void Library::slotSetTrackTableRowHeight(int rowHeight) {
emit(setTrackTableRowHeight(rowHeight));
}
-void Library::deleteCachedTrack(Track* pTrack) noexcept {
+void Library::deleteCachedTrack(
+ Track* pTrack,
+ delete_fun_t deleteFn) noexcept {
// It can produce dangerous signal loops if the track is still
// sending signals while being saved! All references to this
// track have been dropped at this point, so there is no need
@@ -461,13 +463,16 @@ void Library::deleteCachedTrack(Track* pTrack) noexcept {
// depending on the thread from which this method has
// been invoked!
Qt::AutoConnection,
- Q_ARG(Track*, pTrack));
+ Q_ARG(Track*, pTrack),
+ Q_ARG(GlobalTrackCacheDeleter::delete_fun_t, deleteFn));
}
-void Library::saveAndDeleteTrack(Track* pTrack) {
+void Library::saveAndDeleteTrack(
+ Track* pTrack,
+ GlobalTrackCacheDeleter::delete_fun_t deleteFn) {
// Update the database
m_pTrackCollection->saveTrack(pTrack);
// Finally schedule the track for deletion
- GlobalTrackCache::deleteTrack(pTrack);
+ deleteFn(pTrack);
}