[vlc-commits] [Git][videolan/vlc][master] qt: fix assertion in asyncFetchMore when cache tries to recursively refer items

Steve Lhomme (@robUx4) gitlab at videolan.org
Sat Dec 14 07:35:44 UTC 2024



Steve Lhomme pushed to branch master at VideoLAN / VLC


Commits:
b443fb28 by Pierre Lamot at 2024-12-14T06:55:05+00:00
qt: fix assertion in asyncFetchMore when cache tries to recursively refer items

The failling scenario is
* Count&Load task issued (task n°1)
* model need reset (thumbnail is updated for instance) => `needReload = true`
* Count&Load task (n°1) is resolved
  * diff util insert/remove rows
  * Callback from model change ask to refer an item beyond the cache
    * refer issue a new 'fetch more' request (n°2) as m_countTask is 0
  * as `needReload == true`, cache is moved to oldCache, new count&load request
    is issued (n° 3)
* task n°2 resolve, cache is null, assertion fails

by moving the `m_countTask` reset after the model update, we ensure that `refer`
won't start a new request while the model is still propagating the update.

- - - - -


1 changed file:

- modules/gui/qt/util/listcache.hxx


Changes:

=====================================
modules/gui/qt/util/listcache.hxx
=====================================
@@ -521,8 +521,6 @@ void ListCache<T>::asyncCountAndLoad()
             if (m_countTask != taskId)
                 return;
 
-            m_countTask = 0;
-
             //quite unlikley but model may change between count and load
             if (unlikely(list.size() > maximumCount))
             {
@@ -556,6 +554,8 @@ void ListCache<T>::asyncCountAndLoad()
                     emit localSizeChanged(0, m_cachedData->maximumCount);
             }
 
+            m_countTask = 0;
+
             if (m_needReload)
             {
                 m_needReload  = false;



View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/b443fb28911d939990db9ec7d0a0ab1282027995

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/b443fb28911d939990db9ec7d0a0ab1282027995
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance


More information about the vlc-commits mailing list