src: Further hotplug connector fixes 58/28258/4
authorMarius Vlad <marius.vlad@collabora.com>
Thu, 1 Dec 2022 16:37:02 +0000 (18:37 +0200)
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>
Wed, 14 Dec 2022 13:31:19 +0000 (13:31 +0000)
Some further checks for the black curtain not being present always when
perform hot-plugging operations.

Bug-AGL: SPEC-4625
Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
Reported-by: Detlev Casanova <detlev.casanova@collabora.com>
Change-Id: Ia7c05e5b90b9e8260f661a8115a93b0d246b9d98

src/compositor.c
src/shell.c

index 7e89926..1f45a71 100644 (file)
@@ -87,7 +87,8 @@ handle_output_destroy(struct wl_listener *listener, void *data)
        output = wl_container_of(listener, output, output_destroy);
        assert(output->output == data);
 
-       if (output->fullscreen_view.fs->view) {
+       if (output->fullscreen_view.fs &&
+           output->fullscreen_view.fs->view) {
                weston_surface_destroy(output->fullscreen_view.fs->view->surface);
                output->fullscreen_view.fs->view = NULL;
        }
index aaf0468..1418d95 100644 (file)
@@ -802,7 +802,8 @@ ivi_shell_finalize(struct ivi_compositor *ivi)
        weston_layer_fini(&ivi->popup);
 
        wl_list_for_each(output, &ivi->outputs, link) {
-               if (output->fullscreen_view.fs->view) {
+               if (output->fullscreen_view.fs &&
+                   output->fullscreen_view.fs->view) {
                        weston_surface_destroy(output->fullscreen_view.fs->view->surface);
                        output->fullscreen_view.fs->view = NULL;
                }
@@ -1097,9 +1098,10 @@ remove_black_curtain(struct ivi_output *output)
 {
        struct weston_view *view;
 
-       if (!output &&
+       if ((!output &&
            !output->fullscreen_view.fs &&
-           !output->fullscreen_view.fs->view) {
+           !output->fullscreen_view.fs->view) ||
+           !output->fullscreen_view.fs) {
                weston_log("Output %s doesn't have a surface installed!\n", output->name);
                return;
        }
@@ -1126,7 +1128,8 @@ insert_black_curtain(struct ivi_output *output)
 
        if ((!output &&
            !output->fullscreen_view.fs &&
-           !output->fullscreen_view.fs->view) || !output->output) {
+           !output->fullscreen_view.fs->view) || !output->output ||
+           !output->fullscreen_view.fs) {
                weston_log("Output %s doesn't have a surface installed!\n", output->name);
                return;
        }