Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-55539

QQmlDelegateModel::_q_itemsChanged crash

    XMLWordPrintable

Details

    Description

      Logic error

      void QQmlDelegateModel::_q_itemsChanged(int index, int count, 
                                              const QVector<int> &roles)
      {
          Q_D(QQmlDelegateModel);
          if (count <= 0 || !d->m_complete)
              return;
      
          if (d->m_adaptorModel.notify(d->m_cache, index, count, roles)) --|
                                                                           |
                                                                           |
                                                                           |
      bool VDMModelDelegateDataType::notify(     <-------------------------|        
         const QQmlAdaptorModel &,
         /*-------------------------------------------
          * "d->m_cache by refercence"
          *------------------------------------------*/
         const QList<QQmlDelegateModelItem *> &items,
         int index,
         int count,
         const QVector<int> &roles) const
      {
      
         //.....
         
          /*-------------------------------------------
           * "c - calculated once at the start"
           *------------------------------------------*/
          for (int i = 0, c = items.count();  i < c; ++i) {  
              /*--------------------------------------------------------
               * "i - maybe invalid if items.count() changed"
               * " (items is reference to d->m_cache)"
               *------------------------------------------------------*/
              QQmlDelegateModelItem *item = items.at(i);  ------------- -----|
              const int idx = item->modelIndex();                            |
              if (idx >= index && idx < index + count) {                     |
                  for (int i = 0; i < signalIndexes.count(); ++i)            |
                 /*-----------------------------------------------------     |
                 * "Maybe modify d->m_cache.count()"                         |
                 * "e.g. collapse/expand item(geometry changed), scroll"     |
                 *----------------------------------------------------*/     |
                    QMetaObject::activate(item, signalIndexes.at(i), 0);  <--|
                                                                           
              }
          }
      }
      

      Call stack:

      /*----------------------------------------------------------------------------
       * "d->m_cache changed:"
       * "Crash  on the next iteration of the loop: VDMModelDelegateDataType::notify"
       *---------------------------------------------------------------------------*/
      1   QQmlDelegateModelPrivate::removeCacheItem                 
      2   QQmlDelegateModelItem::Dispose                             
      3   QQmlDelegateModelPrivate::release                         
      4   QQmlDelegateModel::release                                 
      5   QQuickItemViewPrivate::releaseItem                         
      /*----------------------------------------------------------------------------
       * "CacheBuffer changed"
       *---------------------------------------------------------------------------*/
      8   QQuickListViewPrivate::removeNonVisibleItems             
      9   QQuickItemViewPrivate::refill                        
      10  QQuickItemViewPrivate::refill                         
      11  QQuickItemViewPrivate::refillOrLayout                   
      12  QQuickListView::viewportMoved                           
      13  QQuickFlickablePrivate::itemGeometryChanged     
      14  QQuickItemViewPrivate::itemGeometryChanged  
      15  QQuickListViewPrivate::itemGeometryChanged  
      16  QQuickItem::geometryChanged               
      17  QQuickItem::setY                                
      18  QQuickFlickablePrivate::setViewportY              
      19  QQuickTimeLineValueProxy<QQuickFlickablePrivate>::setValue 
      20  QQuickFlickable::setContentY                        
      21  QQuickListViewPrivate::setPosition                  
      26  QQuickItem::setHeight                             
      30  QQmlPropertyPrivate::write                        
      31  QQmlPropertyPrivate::writeValueProperty         
      33  QQmlPropertyPrivate::write                      
      34  QSmoothedAnimation::updateCurrentTime           
      35  QAbstractAnimationJob::setCurrentTime           
      36  QAbstractAnimationJob::setState                 
      37  QAbstractAnimationJob::start                    
      38  QSmoothedAnimation::restart                     
      39  QQuickListViewPrivate::updateHighlight          
      40  QQuickItemViewPrivate::itemGeometryChanged      
      41  QQuickListViewPrivate::itemGeometryChanged      
      42  QQuickItem::geometryChanged                     
      /*----------------------------------------------------------------------------
       *  "Item geometry changed"
       *---------------------------------------------------------------------------*/
      43  QQuickItem::setHeight               
      48  QQmlVMEMetaObject::metaCall         
      49  QMetaObject::metacall                     
      50  QQmlBinding::write                       
      51  QQmlBinding::update                      
      52  QQmlBinding::expressionChanged           
      70  QMetaObject::activate                    
      /*----------------------------------------------------------------------------
       *  "Update cache items (d->m_cahce)"
       *---------------------------------------------------------------------------*/
      72  VDMModelDelegateDataType::notify    
      73  QQmlAdaptorModel::notify            
      74  QQmlDelegateModel::_q_itemsChanged  
      75  QQmlDelegateModel::_q_dataChanged   
      /*---------------------------------------------------------------------------
       * "Model dataChanged : Expand item"
       *---------------------------------------------------------------------------*/
      81  QAbstractItemModel::dataChanged                            
      

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            srutledg Shawn Rutledge
            i.kashurnikov Ivan Kashurnikov
            Votes:
            3 Vote for this issue
            Watchers:
            8 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes