Skip to content
Snippets Groups Projects
  1. Dec 18, 2015
    • Daniel P. Berrangé's avatar
      io: add QIOTask class for async operations · b02db2d9
      Daniel P. Berrangé authored
      
      A number of I/O operations need to be performed asynchronously
      to avoid blocking the main loop. The caller of such APIs need
      to provide a callback to be invoked on completion/error and
      need access to the error, if any. The small QIOTask provides
      a simple framework for dealing with such probes. The API
      docs inline provide an outline of how this is to be used.
      
      Some functions don't have the ability to run asynchronously
      (eg getaddrinfo always blocks), so to facilitate their use,
      the task class provides a mechanism to run a blocking
      function in a thread, while triggering the completion
      callback in the main event loop thread. This easily allows
      any synchronous function to be made asynchronous, albeit
      at the cost of spawning a thread.
      
      In this series, the QIOTask class will be used for things like
      the TLS handshake, the websockets handshake and TCP connect()
      progress.
      
      The concept of QIOTask is inspired by the GAsyncResult
      interface / GTask class in the GIO libraries. The min
      version requirements on glib don't allow those to be
      used from QEMU, so QIOTask provides a facsimilie which
      can be easily switched to GTask in the future if the
      min version is increased.
      
      Signed-off-by: default avatarDaniel P. Berrange <berrange@redhat.com>
      b02db2d9
    • Daniel P. Berrangé's avatar
      io: add helper module for creating watches on FDs · 1c809fa0
      Daniel P. Berrangé authored
      
      A number of the channel implementations will require the
      ability to create watches on file descriptors / sockets.
      To avoid duplicating this code in each channel, provide a
      helper API for dealing with file descriptor watches.
      
      There are two watch implementations provided. The first
      is useful for bi-directional file descriptors such as
      sockets, regular files, character devices, etc. The
      second works with a pair of unidirectional file descriptors
      such as pipes.
      
      Signed-off-by: default avatarDaniel P. Berrange <berrange@redhat.com>
      1c809fa0
    • Daniel P. Berrangé's avatar
      io: add abstract QIOChannel classes · 666a3af9
      Daniel P. Berrangé authored
      
      Start the new generic I/O channel framework by defining a
      QIOChannel abstract base class. This is designed to feel
      similar to GLib's GIOChannel, but with the addition of
      support for using iovecs, qemu error reporting, file
      descriptor passing, coroutine integration and use of
      the QOM framework for easier sub-classing.
      
      The intention is that anywhere in QEMU that almost
      anywhere that deals with sockets will use this new I/O
      infrastructure, so that it becomes trivial to then layer
      in support for TLS encryption. This will at least include
      the VNC server, char device backend and migration code.
      
      Signed-off-by: default avatarDaniel P. Berrange <berrange@redhat.com>
      666a3af9
  2. Dec 17, 2015
Loading