<div dir="ltr">Hi Pekka & all<div><br></div><div>When I run some full screen applications under desktop shell,  then kill some applications randomly, I find</div><div>crashes maybe happened sometimes.</div><div><br></div><div>Crash call stack: <span>weston_view_destroy-->weston_view_unmap-->wl_list_reomve(&view->link). The view is black view.<br></span><div class="gmail-gerritBody" id="gmail-gerrit_body" style="font-size:small;padding-left:5px;padding-right:5px"><div><div><div class="gmail-screen gmail-changeScreen gmail-screenNoHeader" style="margin-top:5px"></div></div></div></div> </div><div><br></div><div>Then I debug code, find that shell.c  lower_fullscreen_layer function only delete the layer of black view from layer_list, but not handle the &view.link.</div><div>lower_fullscreen_layer()<br></div><div>{</div><div>.....</div><div>    /* Hide the black view */</div><div>                        weston_layer_entry_remove(&shsurf->fullscreen.black_view->layer_link);</div><div>                        wl_list_init(&shsurf->fullscreen.black_view->layer_link.link);</div><div>                        weston_view_damage_below(shsurf->fullscreen.black_view);</div><div><br></div><div>}</div><div><br></div><div>The code will be called when start second full screen application.</div><div><br></div><div>when weston build view list again, the first surface's black view is not in the view list, the list &view.link maybe point some invalid address.</div><div><br></div><div>I think ivi shell will have the same problems too.  I have a temporary patch to resolve this problem. I want to discuss it in the community.</div><div><br></div><div>option 1</div><div><div>--- a/libweston/compositor.c</div><div>+++ b/libweston/compositor.c</div><div>@@ -2195,7 +2195,7 @@ view_list_add(struct weston_compositor *compositor,</div><div>        struct weston_subsurface *sub;</div><div><br></div><div>        weston_view_update_transform(view);</div><div>-</div><div>+       wl_list_remove(&view.link);</div></div><div><br></div><div>option 2:</div><div><div>--- a/desktop-shell/shell.c</div><div>+++ b/desktop-shell/shell.c</div><div>@@ -3651,6 +3651,7 @@ lower_fullscreen_layer(struct desktop_shell *shell,</div><div>                        weston_layer_entry_remove(&shsurf->fullscreen.black_view->layer_link);</div><div>                        wl_list_init(&shsurf->fullscreen.black_view->layer_link.link);</div><div>                        weston_view_damage_below(shsurf->fullscreen.black_view);</div><div>+                       wl_list_remove(&shsurf->fullscreen.black_view->link);</div><div><br></div><div>                }</div></div><div><br></div><div>Do you think these options reasonable? Thank you.</div><div><br></div><div>Best Regards</div><div>Nancy</div></div>