Skip to content
  • Matthew Barnes's avatar
    Camel: Add an asynchronous API. · cea02d07
    Matthew Barnes authored
    Add pairs of asynchronous "dispatch" and "finish" methods for most
    blocking "sync" methods in Camel's public API.  All asynchronous methods
    have default implementations that just call its synchronous counterpart
    from a thread in GIO's thread pool (which is roughly equivalent to what
    Evolution is doing from its own thread pool).
    
    The possibility for Camel providers to implement an asynchronous
    architecture by overriding the asynchronous methods exists, but first
    requires some cleanup in the synchronous dispatching functions, many of
    which are not "pure" in the sense that they do extra stuff before and
    after calling the class method they wrap.  That extra logic needs to
    somehow run as part of the class method itself, either via chaining up
    from subclasses or some other means.
    
    In simpler terms, the following invariant must hold before providers can
    override asynchronous methods and expect correct behavior from Camel:
    
        Calling camel_foo_frobnicate_sync(foo) is equivalent to calling
        CAMEL_FOO_GET_CLASS (foo)->frobnicate_sync (foo), just with fewer
        runtime checks.
    cea02d07