Skip to content
  • Pekka Paalanen's avatar
    Use weston_compositor_add_destroy_listener_once() in plugins · 6ffbba3a
    Pekka Paalanen authored and Daniel Stone's avatar Daniel Stone committed
    
    
    This introduces a new convention of checking through the compositor destroy
    listener if the plugin is already initialized. If the plugin is already
    initialized, then the plugin entry function succeeds as a no-op. This makes it
    safe to load the same plugin multiple times in a running compositor.
    
    Currently module loading functions return failure if a plugin is already
    loaded, but that will change in the future. Therefore we need this other method
    of ensuring we do not double-initialize a plugin which would lead to list
    corruptions the very least.
    
    All plugins are converted to use the new helper, except:
    - those that do not have a destroy listener already, and
    - hmi-controller which does the same open-coded as the common code pattern
      did not fit there.
    
    Plugins should always have a compositor destroy listener registered since they
    very least allocate a struct to hold their data. Hence omissions are
    highlighted in code.
    
    Backends do not need this because weston_compositor_load_backend() already
    protects against double-init. GL-renderer does not export a standard module
    init function so cannot be initialized the usual way and therefore is not
    vulnerable to double-init.
    
    Signed-off-by: default avatarPekka Paalanen <pekka.paalanen@collabora.com>
    6ffbba3a