fast path for local D-Bus calls
Havoc Pennington
hp at redhat.com
Mon Dec 18 12:02:26 PST 2006
Simon McVittie wrote:
> Oh, also: it occurs to me that if blocking local calls get a fast-path,
> then the method implementation will run in whatever thread is blocking,
> whereas in a true remote call the method implementation will run in the
> mainloop thread. The issues are similar to those raised if we have
> blocking calls re-enter the main loop.
If we did a fast path I'd do it by by essentially moving the message
from the head of the outgoing queue to the tail of the incoming queue
when doing the read_write step. Then the semantics seen by the app don't
change and there is no new reentrancy introduced.
However, the overall semantics do change, for example now dbus-monitor
can't see the message.
On a more pragmatic level, I think DBusConnection, threads, reentrancy,
and the read_write/dispatch loop are at something of a complexity limit
where it's already very hard to understand; I'm a little reluctant to
make it worse, in particular with code that tries to guess whether a
message would be routed locally by the bus daemon.
The dbus design certainly reflects a point of view that "network
transparency" is a poor design choice, and I'd tend to think we should
just stick with that.
The way bindings are supposed to work is that you have a plain local
non-networked object, and you can wrap it in a proxy object that exports
the local object over the network. But when working locally, you are
supposed to just use the local object normally.
Havoc
More information about the dbus
mailing list