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

Michael Wheatland <[email protected]> changed:

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

--- Comment #5 from Michael Wheatland <[email protected]> ---
The symptoms here match what I see on 6.6.6 — self-referencing
`replicationSource`
on every output, a disabled output that cannot be enabled, and a GUI deadlock —
but I think one part of the diagnosis is off.

The `mstPath` values of `"-1\0"`, `"-3\0"` and so on are not persisted errno
values. They are MST port paths. The kernel builds the DRM `PATH` property in
`build_mst_prop_path()` as `mst:<conn_base_id>-<port>-<port>...`, and KWin
stores
`value.mid(firstHyphen)` of that, so `mst:64-1` becomes `-1`:

```cpp
// src/backends/drm/drm_connector.cpp:317-327
m_mstPath.clear();
if (auto blob = path.immutableBlob()) {
    QByteArray value = QByteArray(static_cast<const char *>(blob->data),
blob->length);
    if (value.startsWith("mst:")) {
        const ssize_t firstHyphen = value.indexOf('-');
        if (firstHyphen > 0) {
            m_mstPath = value.mid(firstHyphen);
        } else {
            qCWarning(KWIN_DRM) << "Unexpected format in path property:" <<
value;
        }
```

That is the only writer of `m_mstPath` in the tree, and it is gated on the blob
existing and starting with `"mst:"` — a failed property read leaves it empty,
so
an errno cannot reach it.

The trailing NUL is real but separate and minor: the property blob length
includes
the terminator, so `QByteArray(data, blob->length)` carries it into the
identifier
and from there into the JSON. Worth trimming, but it is stable across reads and
is
not what breaks the configuration.

On my machine the outputs carrying an `mstPath` are exactly the two behind the
MST
hub, and the two that are not behind it have none — so the values track real
topology rather than being noise.

The self-referencing `replicationSource` appears to come from libkscreen
instead:
an unguarded empty-string match against output UUIDs, which assigns the
empty-UUID output to every output. Details and a proposed fix:
https://bugs.kde.org/show_bug.cgi?id=526366.
Bug 520098 shows the same signature with the id of the lid-disabled panel.

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

Reply via email to