Skip to content
  1. Mar 17, 2016
  2. Oct 20, 2015
  3. Oct 13, 2015
  4. Sep 17, 2015
  5. Feb 17, 2015
  6. Mar 27, 2014
  7. Jan 23, 2014
  8. Jan 21, 2014
  9. Jan 13, 2014
  10. Dec 20, 2013
  11. Dec 10, 2013
  12. Nov 05, 2013
  13. Oct 31, 2013
  14. Jul 15, 2013
  15. May 13, 2013
  16. Apr 17, 2013
    • Sam Spilsbury's avatar
      Added some new hooks to PluginClassHandler to allow a VTable to specify if loaded. · 267f124c
      Sam Spilsbury authored
      PluginClassHandler::get () was designed to simply instantiate an instance of that
      class for the core structure, but it did this without checking if the plugin was
      loaded.
      
      Added some new methods to PluginClassHandler exposed by LoadedPluginClassBridge
      and only accessible by those who implement PluginKey to specify globally
      whether or not a plugin is actually loaded, so that PluginClassHandler can
      return accordingly.
      
      Integration and unit tests added as appropriate
      
      (LP: #1169620)
      (LP: #1101026)
      267f124c
  17. Mar 26, 2013
  18. Feb 11, 2013
  19. Jan 28, 2013
  20. Jan 24, 2013
  21. Dec 13, 2012
  22. Dec 10, 2012
    • Sam Spilsbury's avatar
      Ensure that we never get a BadWindow due to the sibling in a ConfigureWindow. · a14bc36b
      Sam Spilsbury authored
      Issuing a ConfigureWindow request with a sibling parameter that refers
      to a sibling that's actually destroyed server side results in a BadWindow
      error, and causes what we might think is a correct ConfigureWindow request
      to fail. This would cause even more problems because we had marked
      the request as succeeding, and adjusted serverWindows appropriately,
      which would cause further restacks to rely on the invalid internal state.
      
      Unfortunately, this is effectively a race condition between the client and
      the server. We receive our events and are racing the server to not
      destroy the window internally before we get a chance to issue a
      ConfigureWindow request relative to the destroyed window.
      
      Because of that, we need to hold a server grab during the period in which
      we check if the sibling window is still valid server side and when
      we issue a ConfigureWindow request. If it is valid, then we can guaruntee
      that the server will process the request relative to the sibling window,
      and if not, we can select another sibling as appropriate.
      
      Adjusted the API such that any function which looks for an appropriate sibling
      or any function which calls XConfigureWindow with the sibling parameter
      set requires a server grab to be active (by virtue of the fact that they
      accept a const ServerLock &).
      
      The only implicit contract between clients now is that the client must
      obtain the sibling window either by using one of the designated functions
      to do so which requires a ServerLock, or that the client holds a server lock
      and while it holds the ServerLock, it calls XGetWindowAttributes or
      XGetGeometry to check if the sibling window is valid.
      
      configureXWindow was split into configureXWindow and
      restackAndConfigureXWindow. The latter requires a server lock, the former
      will warn about this potential race condition if you attempt to
      restack a window using it.
      
      Passing tests:
      
      [ RUN      ] CompizXorgSystemStackingTest.TestCreateRelativeToDestroyedWindowFindsAnotherAppropriatePosition
      [       OK ] CompizXorgSystemStackingTest.TestCreateRelativeToDestroyedWindowFindsAnotherAppropriatePosition (55 ms)
      
      (LP: #1088399)
      a14bc36b
    • Daniel van Vugt's avatar
  23. Dec 07, 2012
  24. Dec 03, 2012
    • Sam Spilsbury's avatar
      Fix race conditions in the tests. · 667ce7b9
      Sam Spilsbury authored
      1. Have compiz send a dedicated startup message so that we don't race 
      it to check that a PropertyNotify was sent before it grabs the server
      (since the grab position changed)
      2. Fix event advancing semantics in the tests - only go to the next event
      either if a) the user asked for it or b) the event didn't match
      what the user wanted. Advancing even when it did match messes up
      the case where matcher chain on each other
      667ce7b9
  25. Dec 02, 2012
  26. Nov 30, 2012