https://bugs.kde.org/show_bug.cgi?id=526222

Louis Liu <[email protected]> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |[email protected]

--- Comment #3 from Louis Liu <[email protected]> ---
Additional data point, on Plasma 6.8.0 / Qt 6.12.0 / Wayland.

Same crash signature as reported here, but the innermost frame differs
slightly. On
Qt 6.11.2 the crash lands in QSortFilterProxyModelPrivate::proxy_to_source();
on
Qt 6.12 the faulting pointer is d->model in
QAbstractProxyModel::canFetchMore(), i.e.

    bool QAbstractProxyModel::canFetchMore(const QModelIndex &parent) const
    {
        Q_D(const QAbstractProxyModel);
        return d->model->canFetchMore(mapToSource(parent));   // d->model is
null
    }
(src/corelib/itemmodels/qabstractproxymodel.cpp:422 in qtbase 6.12.0-3)

Backtrace from coredumpctl (plasmashell 6.8.0-1, Arch, Wayland, kernel 7.2.11):

    #6  QQmlDelegateModel::setRootIndex(const QVariant&)
    #5  QSortFilterProxyModel::canFetchMore(const QModelIndex&)
    #4  (libQt6Core, QAbstractProxyModel::canFetchMore)
    ... QQuickLoader::setActive -> QQmlComponent::create ->
QQmlBinding::doUpdate
    ... QQuickDeliveryAgentPrivate::sendHoverEvent

Trigger: hovering (or dragging) a task button in the **Icons-Only Task
Manager**
(org.kde.plasma.icontasks). In 6.8 that applet reuses the new task manager QML
module via "X-Plasma-RootPath": "org.kde.plasma.taskmanager", so it hits the
same
code path as Icons-and-Text.

The object that crashes is the DelegateModel inside the *group* tooltip, in
plasma-desktop 6.8 applets/taskmanager/qml/ToolTipDelegate.qml:

    Loader {
        sourceComponent: isGroup ? groupToolTip : singleTooltip
    }
    Component {
        id: groupToolTip
        ...
        DelegateModel {
            id: delegateModel
            model: tasksModel
            rootIndex: toolTipDelegate.rootIndex
        }
    }

isGroup comes from model.IsGroupParent (Task.qml:365), so that DelegateModel
only
exists for a *group parent* task. Hence a reliable workaround: set the applet's
"Group:" to "Do not group" (groupingStrategy=0). No group parent => no
DelegateModel => this code path is never entered. That is what I run locally
now.

Where the null source model comes from: the proxy chain built by
TaskManager::TasksModel in plasma-workspace 6.8 libtaskmanager is
TasksModel(QSortFilterProxyModel) -> TaskGroupingProxyModel ->
TaskFilterProxyModel
(QSortFilterProxyModel) -> ConcatenateTasksProxyModel, and two paths can leave
it
without a source model:

  1. TasksModel::setGroupMode() explicitly nulls one:
     libtaskmanager/tasksmodel.cpp:1297
         d->flattenGroupsProxyModel->setSourceModel(nullptr);
  2. Qt's QAbstractProxyModel::_q_sourceModelDestroyed() nulls d->model when a
     source model is destroyed out from under the chain.

Checked upstream: neither plasma-workspace nor plasma-desktop 6.8.1 contains
any
libtaskmanager / task manager change (compared v6.8.0..v6.8.1 in both repos),
so
the 6.8.1 point release does not fix this. On my host it is a low-frequency
event
(1 crash in the last 30 days), so it looks like a race that needs the source
model
to be reset/destroyed while the tooltip delegate is being loaded.

Low frequency and reproducibility note: I could not produce a deterministic
repro; my crash happened while dragging a task button, which matches the
original
report here.

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to