dbus questions

Gordon Tyler gordon@doxxx.net
Tue, 09 Dec 2003 11:23:58 -0500

David Zeuthen wrote:
> 2. Message dependencies
> I have an situation where I know that I will receive several messages, 
> but one of
> the early messages need to wait for a later message to have been processed,
> before the early message itself can be processed (possibly with some 
> timeout).
> How is this easiest achieved? I suppose the only answer is go 
> multithreaded (even
> though I really want to avoid this); Is D-BUS designed to do this? I 
> can't seem to
> find anything useful about this in the docs..

I get the impression that this is not within D-BUS' domain. It's an 
application-level requirement which you could probably achieve without 
multi-threading by using a queue-like system:

1. You receive message A but you determine that it requires message B to 
be processed first. You push it onto the queue, making a note of its 
dependencies and continue listening for messages.
2. You receive message B but you determine that it requires message C to 
be processed first. You also push it onto the queue and continue 
listening for messages.
3. You receive message C that has no dependencies. You process it:
    a. You search through the queue in most-recent-to-oldest order, 
looking for a message that depends on the message being processed, 
finding message B.
    b. Having found message B, you make a note in the message that it's 
message C dependency has been satisified.
    c. Since message B has had all its dependencies satisfied, you 
process it as above.
    d. Continue searching for a message which depends on message C.

Or something along those lines. Some provision would have to be made to 
keep track of situations like message C arriving first.