Use weston_compositor_add_destroy_listener_once() in plugins
authorPekka Paalanen <pekka.paalanen@collabora.com>
Wed, 6 Nov 2019 10:59:32 +0000 (12:59 +0200)
committerDaniel Stone <daniel@fooishbar.org>
Thu, 21 Nov 2019 16:32:55 +0000 (16:32 +0000)
commit6ffbba3ac13bc16d247ea50ef09cb149d892e125
treef92bdd36e87929a9cc30b0675cfc84b6775ba099
parent5caef6d355f87af2e7f20372dc8c328faba53148
Use weston_compositor_add_destroy_listener_once() in plugins

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: Pekka Paalanen <pekka.paalanen@collabora.com>
15 files changed:
compositor/cms-colord.c
compositor/cms-static.c
compositor/screen-share.c
compositor/systemd-notify.c
desktop-shell/shell.c
fullscreen-shell/fullscreen-shell.c
include/libweston/libweston.h
ivi-shell/hmi-controller.c
ivi-shell/ivi-shell.c
libweston/compositor.c
pipewire/pipewire-plugin.c
remoting/remoting-plugin.c
tests/weston-test-desktop-shell.c
tests/weston-test.c
xwayland/launcher.c