dvratil created this revision.
dvratil added a reviewer: KWin.
Herald added a project: Frameworks.
Herald added a subscriber: kde-frameworks-devel.
dvratil requested review of this revision.

REVISION SUMMARY
  Instead just unref it, because the wl_display_dispatch_queue_pending
  will try to destroy the callback afterwards as well, leading to
  invalid read/write.
  
  Fixes Valgrind warnings when running KScreen tests:
  
  460922== Invalid read of size 4
  -------------------------------
  
  460922==    at 0x5CE5B34: wl_proxy_unref (wayland-client.c:230)
  ---------------------------------------------------------------
  
  460922==    by 0x5CE5C33: destroy_queued_closure (wayland-client.c:292)
  -----------------------------------------------------------------------
  
  460922==    by 0x5CE74AB: dispatch_queue (wayland-client.c:1591)
  ----------------------------------------------------------------
  
  460922==    by 0x5CE74AB: wl_display_dispatch_queue_pending 
(wayland-client.c:1833)
  
-----------------------------------------------------------------------------------
  
  460922==    by 0x4E0240D: KWayland::Client::EventQueue::dispatch() 
(src/frameworks/kwayland/src/client/event_queue.cpp:96)
  
--------------------------------------------------------------------------------------------------------------------------
  
  g==460922==  Address 0x17233aac is 44 bytes inside a block of size 80 free'd
  
  460922==    at 0x483B9F5: free (vg_replace_malloc.c:540)
  --------------------------------------------------------
  
  460922==    by 0x4E15B60: destroy 
(src/frameworks/kwayland/src/client/wayland_pointer_p.h:63)
  
---------------------------------------------------------------------------------------------
  
  460922==    by 0x4E15B60: 
KWayland::Client::Registry::Private::globalSync(void*, wl_callback*, unsigned 
int) (src/frameworks/kwayland/src/client/registry.cpp:548)
  
------------------------------------------------------------------------------------------------------------------------------------------------------------------
  
  ...
  
  460922==    by 0x5CE74AB: dispatch_queue (wayland-client.c:1591)
  ----------------------------------------------------------------
  
  460922==    by 0x5CE74AB: wl_display_dispatch_queue_pending 
(wayland-client.c:1833)
  
-----------------------------------------------------------------------------------
  
  460922==    by 0x4E0240D: KWayland::Client::EventQueue::dispatch() 
(src/frameworks/kwayland/src/client/event_queue.cpp:96)
  
--------------------------------------------------------------------------------------------------------------------------

TEST PLAN
  Run testkwaylandbackend from libkscreen under Valgrind - no more invalid reads

REPOSITORY
  R127 KWayland

BRANCH
  master

REVISION DETAIL
  https://phabricator.kde.org/D27538

AFFECTED FILES
  src/client/registry.cpp

To: dvratil, #kwin
Cc: kde-frameworks-devel, LeGast00n, cblack, GB_2, michaelh, ngraham, bruns

Reply via email to