Bug 72404

Summary: Weston infinite loop, 100% CPU when client preview activated during fullscreen
Product: Wayland Reporter: U. Artie Eoff <ullysses.a.eoff>
Component: westonAssignee: Wayland bug list <wayland-bugs>
Status: VERIFIED FIXED QA Contact:
Severity: critical    
Priority: medium CC: anasuyax.r.nannuri, pochu27
Version: unspecified   
Hardware: Other   
OS: All   
Whiteboard:
i915 platform: i915 features:

Description U. Artie Eoff 2013-12-06 16:36:18 UTC
Weston allows user to preview running clients by pressing and releasing the <mod> key.  If a client is in fullscreen mode, then attempting to activate preview mode causes Weston to lock-up.

1. Execute weston-terminal
2. Make weston-terminal fullscreen (<F11>)
3. Activate client previews by pressing and releasing the <mod> key (windows key in my case)
4. Observe Weston locks-up and can't vt-switch.  SSH sessions still work and weston can be killed via ssh.

wayland (master) heads/master-0-g1521c62
drm (master) libdrm-2.4.50-0-g4c5de72
mesa (master) heads/master-0-g453651e
libva (master) heads/master-0-g73a11b3
intel-driver (master) heads/master-0-g9d0bd94
weston (master) heads/master-0-gc8f8dd8
Comment 1 U. Artie Eoff 2013-12-06 16:48:06 UTC
This can be reproduced on desktop-shell running on x11 and drm backends.  Weston actually ends up hogging 100% CPU and starts allocating huge amounts of memory until it runs out.
Comment 2 U. Artie Eoff 2013-12-19 15:02:06 UTC
*** Bug 72856 has been marked as a duplicate of this bug. ***
Comment 3 Emilio Pozuelo Monfort 2014-01-07 15:41:57 UTC
I've sent a patch to the ml.
Comment 4 Kristian Høgsberg 2014-01-08 05:52:47 UTC
commit e6bbe5a90d1ea91624ebdbdb7abdc7a1bbe9829d
Author: Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
Date:   Tue Jan 7 16:41:39 2014 +0100

    exposay: fix infinite loop with fullscreen surfaces
    
    We were calling exposay_highlight_surface() inside a wl_list_for_each
    loop for a layer, but exposay_highlight_surface() calls activate()
    which calls shell_surface_update_layer(), which removes the surface
    from its layer and reinserts it, causing an infinite loop.
    
    Call exposay_highlight_surface() outside the for_each to avoid this.
    
    https://bugs.freedesktop.org/show_bug.cgi?id=72404

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.