1. 12 3月, 2013 1 次提交
  2. 19 3月, 2012 1 次提交
  3. 24 2月, 2012 1 次提交
    • M
      qemu-ga: add initial win32 support · 7868e26e
      Michael Roth 提交于
      This adds a win32 channel implementation that makes qemu-ga functional
      on Windows using virtio-serial (unix-listen/isa-serial not currently
      implemented). Unlike with the posix implementation, we do not use
      GIOChannel for the following reasons:
      
       - glib calls stat() on an fd to check whether S_IFCHR is set, which is
         the case for virtio-serial on win32. Because of that, a one-time
         check to determine whether the channel is readable is done by making
         a call to PeekConsoleInput(), which reports the underlying handle is
         not a valid console handle, and thus we can never read from the
         channel.
      
       - if one goes as far as to "trick" glib into thinking it is a normal
         file descripter, the buffering is done in such a way that data
         written to the output stream will subsequently result in that same
         data being read back as if it were input, causing an error loop.
         furthermore, a forced flush of the channel only moves the data into a
         secondary buffer managed by glib, so there's no way to prevent output
         from getting read back as input.
      
      The implementation here ties into the glib main loop by implementing a
      custom GSource that continually submits asynchronous/overlapped I/O to
      fill an GAChannel-managed read buffer, and tells glib to poll the
      corresponding event handle for a completion whenever there is no
      data/RPC in the read buffer to notify the main application about.
      7868e26e