• D
    io: add QIOTask class for async operations · b02db2d9
    Daniel P. Berrange 提交于
    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: NDaniel P. Berrange <berrange@redhat.com>
    b02db2d9
trace-events 121.3 KB