Skip to content
  • Martin Flöser's avatar
    [server] Introduce a Resource::unbound signal emitted from unbind handler · ac491d58
    Martin Flöser authored
    Summary:
    So far for internal cleanup we mostly listen to QObject::destroyed.
    When a Resource gets unbind the wl_resource is set to null and the
    Resource gets deleteLater. This creates a short time frame when the
    Resource is still there, but the wl_resource is null. For most internal
    usages the Resource is completely useless at that point and should no
    longer be considered. So far it was still considered and could hit
    crashers, if a code path did not nullptr check. Unfortunately
    libwayland-server is not nullptr safe: if called with a null value it
    tends to crash.
    
    So this check introduces a new signal unbound which can be listend to
    in addition to the destroyed signal. It's used in SeatInterface for
    DataDeviceInterface, where we experienced a crash related to that.
    
    A test case is added which exposes the crash, but it already needs
    the unbound signal to get into the crashy condition. The actual crash
    is fixed twice - with the help of the unbound signal, but also by
    introducing the nullptr check where it's needed.
    
    Reviewers: #plasma_on_wayland
    
    Subscribers: plasma-devel
    
    Tags: #plasma_on_wayland
    
    Differential Revision: https://phabricator.kde.org/D1868
    ac491d58