-
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