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

--- Comment #13 from Harald Sitter <[email protected]> ---
I think we found what's causing this. Nvidia uses the basic rendering loop for
various reasons.

in basic render mode, cleanup entirely hinges on QSGContext::endSync getting
called. this would happen here

    if (lastDirtyWindow)
        data.rc->endSync();


except we already see it can maybe not...

    bool lastDirtyWindow = true;
    for (auto it = m_windows.cbegin(), end = m_windows.cend(); it != end; ++it)
{
        if (it->updatePending) {
            lastDirtyWindow = false;
            break;
        }
    }

m_windows is a hash of all open windows...
including hidden windows...
hidden windows never get painted...
their updatePending state will never flip...
and by extension endSync never gets called

the most trivial way to trigger this is to simply open kickoff. when it was
opened once it will remain around as a hidden window and block memory cleanup.
that also explains why it looked like a restarted plasmashell doesn't leak
memory - it only starts when (e.g.) kickoff got used once.

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

Reply via email to