1. 16 Nov, 2013 3 commits
    • Kristian Høgsberg's avatar
      client: Introduce functions to allocate and marshal proxies atomically · 853c24e6
      Kristian Høgsberg authored
      
      
      The server requires clients to only allocate one ID ahead of the previously
      highest ID in order to keep the ID range tight.  Failure to do so will
      make the server close the client connection.  However, the way we allocate
      new IDs is racy.  The generated code looks like:
      
        new_proxy = wl_proxy_create(...);
        wl_proxy_marshal(proxy, ... new_proxy, ...);
      
      If two threads do this at the same time, there's a chance that thread A
      will allocate a proxy, then get pre-empted by thread B which then allocates
      a proxy and then passes it to wl_proxy_marshal().  The ID for thread As
      proxy will be one higher that the currently highest ID, but the ID for
      thread Bs proxy will be two higher.  But since thread B prempted thread A
      before it could send its new ID, B will send its new ID first, the server
      will see the ID from thread Bs proxy first, and will reject it.
      
      We fix this by introducing wl_proxy_marshal_constructor().  This
      function is identical to wl_proxy_marshal(), except that it will
      allocate a wl_proxy for NEW_ID arguments and send it, all under the
      display mutex.  By introducing a new function, we maintain backwards
      compatibility with older code from the generator, and make sure that
      the new generated code has an explicit dependency on a new enough
      libwayland-client.so.
      
      A virtual Wayland merit badge goes to Kalle Vahlman, who tracked this
      down and analyzed the issue.
      Reported-by: default avatarKalle Vahlman <kalle.vahlman@movial.com>
      853c24e6
    • Pekka Paalanen's avatar
      protocol: add sub-surfaces to the core · 81c57614
      Pekka Paalanen authored
      The sub-surface protocol was originally committed into Weston on May
      10th, 2013, in commit 2396aec6
      
      . The
      design for the protocol had started in the beginning of December 2012. I
      think it is high time to move this into the core now.
      
      This patch copies the sub-surface protocol as it was in Weston on Nov
      15th, 2013, into Wayland. Weston gets a patch to remove the protocol from
      there.
      
      Sub-surface is a wl_surface role. You create a wl_surface as usual, and
      assign it the sub-surface role and a parent wl_surface. Sub-surfaces are
      an integral part of the parent surface, and stay glued to the parent.
      For window management, a window is the union of the top-level
      wl_surface and all its sub-surfaces. Sub-surfaces are not clipped to the
      parent, and the union of the surface tree can be larger than the
      (top-level) wl_surface at its root.
      
      The representative use case for sub-surfaces is a video player window.
      When the video content is given its own wl_surface, there is no need to
      modify the video frame contents after decoding or copy them into a whole
      window sized buffer before submitting it to the compositor. This allows
      efficient, zero-copy video presentation paths, where video decoding
      hardware produces a (YUV) buffer, which eventually ends up in a
      (YUV-capable) hardware overlay and is scanned out directly.
      
      This can also be used for zero-copy presentation of windowed OpenGL
      content, where the OpenGL rendering engine does not need to draw or
      avoid window decorations.
      
      Sub-surfaces allow mixing different buffer types into the same window,
      e.g. software-rendered decorations in wl_shm buffers, and live content
      in EGL-based buffers.
      
      However, the sub-surface extension does not offer clipping or scaling
      facilities, or accurate presentation timing. Those are topics for
      additional extensions.
      Signed-off-by: Pekka Paalanen's avatarPekka Paalanen <pekka.paalanen@collabora.co.uk>
      81c57614
    • Lubomir Rintel's avatar
      shm: Avoid file descriptor leak upon unsuccessful mmap · 4a196570
      Lubomir Rintel authored
      
      
      It would be possible to make the compositor leak file descriptors by
      passing descriptors of open unmmapable files to it, such as /dev/null.
      Signed-off-by: Lubomir Rintel's avatarLubomir Rintel <lkundrak@v3.sk>
      4a196570
  2. 15 Nov, 2013 5 commits
  3. 14 Nov, 2013 2 commits
    • Kristian Høgsberg's avatar
      server: Start documenting the server side API · b583b545
      Kristian Høgsberg authored
      This is now public, stable API, so it seems prudent to actually document it.
      b583b545
    • Neil Roberts's avatar
      server: Add API to protect access to an SHM buffer · cf4f5995
      Neil Roberts authored
      Linux will let you mmap a region of a file that is larger than the
      size of the file. If you then try to read from that region the process
      will get a SIGBUS signal. Currently the clients can use this to crash
      a compositor because it can create a pool and lie about the size of
      the file which will cause the compositor to try and read past the end
      of it. The compositor can't simply check the size of the file to
      verify that it is big enough because then there is a race condition
      where the client may truncate the file after the check is performed.
      
      This patch adds the following two public functions in the server API
      which can be used wrap access to an SHM buffer:
      
      void wl_shm_buffer_begin_access(struct wl_shm_buffer *buffer);
      void wl_shm_buffer_end_access(struct wl_shm_buffer *buffer);
      
      The first time wl_shm_buffer_begin_access is called a signal handler
      for SIGBUS will be installed. If the signal is caught then the buffer
      for the current pool is remapped to an anonymous private buffer at the
      same address which allows the compositor to continue without crashing.
      The end_access function will then post an error to the buffer
      resource.
      
      The current pool is stored as part of some thread-local storage so
      that multiple threads can safely independently access separate
      buffers.
      
      Eventually we may want to add some more API so that compositors can
      hook into the signal handler or replace it entirely if they also want
      to do some SIGBUS handling.
      cf4f5995
  4. 25 Oct, 2013 1 commit
    • Peter Hutterer's avatar
      protocol: validate the protocol against a dtd · 05f95c85
      Peter Hutterer authored
      The scanner is not very forgiving if the protocol doesn't match it's
      expectations and crashes without much of a notice. Thus, validate the protocol
      against a DTD.
      
      Move the protocol subdir forward so we validate first before trying anything
      else, and install the DTD so we can validate weston's protocols as well.
      05f95c85
  5. 23 Oct, 2013 1 commit
  6. 21 Oct, 2013 1 commit
  7. 11 Oct, 2013 1 commit
  8. 09 Oct, 2013 1 commit
  9. 08 Oct, 2013 1 commit
  10. 03 Oct, 2013 1 commit
  11. 25 Sep, 2013 1 commit
    • Neil Roberts's avatar
      client: Fix handling display->reader_count if poll fails · 799ea720
      Neil Roberts authored
      In wl_display_dispatch_queue, if poll fails then it would previously
      return immediately and leak a reference in display->reader_count. Then
      if the application ignores the error and tries to read again it will
      block forever. This can happen for example if the poll fails with
      EINTR which the application might consider to be a recoverable error.
      This patch makes it cancel the read so the reader_count will be
      decremented when poll fails.
      799ea720
  12. 22 Sep, 2013 2 commits
  13. 21 Sep, 2013 7 commits
    • Marek Ch's avatar
      tests: add wl_resource tests · b99edb8b
      Marek Ch authored
      b99edb8b
    • Marek Ch's avatar
      tests: add unit tests for wl_signal · 6f1569bd
      Marek Ch authored
      Test wl_signal initialization, adding and getting listeners and emitting
      6f1569bd
    • Marek Ch's avatar
      tests: extended message when leak in test is detected · ec08c5c3
      Marek Ch authored
      When memory or fd leak is detected, print how many blocks of memory were
      allocated and not freed, respectively how many files were opened/unclosed.
      ec08c5c3
    • Chang Liu's avatar
      client: fix an inconsistency in documentation · 5cf31443
      Chang Liu authored
      The errno is set to EAGAIN when there are undispatched events, according
      to L1066 of wayland-client.c.
      5cf31443
    • Aaron Faanes's avatar
      doc: Slight tweaks to wl_listener · 5a925532
      Aaron Faanes authored
      Prefer \comment over // in code blocks for consistency's sake and keep
      variable definitions separated by a line from the rest of the body.
      5a925532
    • Aaron Faanes's avatar
      utils: Document wl_container_of · 8267f283
      Aaron Faanes authored
      8267f283
    • Aaron Faanes's avatar
      doc: Create \comment alias for C-style comments · 217909c1
      Aaron Faanes authored
      Since /* */ do not nest, documentation is forced to either use C++ style
      // comments or some other foreign notation. This commit provides an alias
      that allows C-style comments to be introduced in code blocks that support
      aliases.
      
      It should be noted that this macro will not work within \code blocks, as
      Doxygen commands are ignored there. Instead, Doxygen's fenced code
      blocks (created via ~~~) must be used for proper output. To demonstrate:
      
      ~~~
      struct example_node {
              int id;
              \comment{Other members ...}
      };
      ~~~
      
      will roughly yield the following HTML (excluding syntax highlighting):
      
      <pre>
      struct example_node {
              int id;
              /* Other members ... */
      };
      </pre>
      217909c1
  14. 17 Sep, 2013 5 commits
  15. 11 Sep, 2013 5 commits
  16. 30 Aug, 2013 3 commits