dbus/proxies.py: Finish implementing deferred methods so they can be async.
commit43c48b9c7fdbb5741daa024df9e7a319d1993dac
authorSimon McVittie <simon.mcvittie@collabora.co.uk>
Wed, 17 Jan 2007 13:06:33 +0000 (17 13:06 +0000)
committerSimon McVittie <simon.mcvittie@collabora.co.uk>
Wed, 17 Jan 2007 13:06:33 +0000 (17 13:06 +0000)
tree33b7fe1856038d0cc1a27ce58e72c724afa21463
parent4dbee87fbe9dd7abb56d8d150d8c8ae7bd01f261
dbus/proxies.py: Finish implementing deferred methods so they can be async.

* Queue up async methods and execute them when introspection finishes, instead
  of blocking on the introspection operation (heavily based on patch by J5)
* Rename DeferedMethod (sic) to spell Deferred correctly, and rename to
  _DeferredMethod (also _ProxyMethod) since these classes are not public API
* Make it safe to keep a reference to a DeferredMethod and call it with
  differing arguments:
    meth = proxy.DoStuff
    meth(1, reply_handler=on_reply, error_handler=on_error)
    meth(2, reply_handler=on_reply, error_handler=on_error)
* Make it safe to keep references to DeferredMethod even after introspection
  has finished - if called after introspection finishes, silently do an
  immediate call
* Add some locking to avoid subtle failures if one thread appends
  to the pending introspect queue at the same time another thread gets
  introspection results back - ProxyObject and friends should now be
  threadsafe (I think)
dbus/proxies.py