All quiet on the dbus bus
Simon Burton
simon at arrowtheory.com
Mon Jan 11 04:04:11 PST 2010
On Mon, 11 Jan 2010 08:56:14 +0100
Thiago Macieira <thiago at kde.org> wrote:
> Em Segunda-feira 11. Janeiro 2010, às 06.51.07, Simon Burton escreveu:
> > I have my own select loop and put the unix_fd of the dbus connection in
> > that. After a while (2 hours or so, at several messages per second)
> > my app stops getting any data back from the dbus-daemon, and
> > the select loop goes into a spin.
>
> What do you mean? There's nothing to be read from the socket?
>
> Or the app stops writing?
>
> > In the interests of debugging this I am considering taking over
> > reading/writing the socket. I am using anonymous connections, but i know
> > nothing about the auth end of things. Maybe that will be too hard to do
> > manually.
> >
> > How do I find out how much dbus data my application is sending/receiving ?
>
> What for?
So i can answer your previous question, ie. debug my app.
>
> > It seems that dbus_connection_send always writes immediately (in this app)
> > so dbus_connection_get_outgoing_size always reports 0.
>
> Yes, it tries to write immediately. It uses the select(2) write notification
> only if it couldn't write immediately.
>
> > It looks like dbus_message_marshal allocates some memory to store the
> > marshal to. How do I free this memory ?
>
> What for?
huh?
>
> The library caches DBusMessages that have been freed so that they can be
> reused later. There's a way to disable this caching by modifying a #define (I
> don't know which one) in the library and recompiling.
>
> > Is there a way to specify where to marshal to ?
>
> No. It marshals to memory. Where else would it marshal to?
Wtf ? What if i want to marshal into a buffer that i made ?
>
> Unless I didn't understand the question.
>
> > Even worse, the unmarshal function will not tell me how much data was
> > unmarshalled and so how do i parse packets with multiple messages in them
> > ?
>
> I think there's a function added in 1.2 that tells you how big a message is,
> given a buffer. I don't know how it works.
>
> If you don't want to use it, you can parse the header. There's a field in the
> header that includes the size of the payload. But note that the size of the
> header is also variable, so you need to find the end of the header too (there's
> a variable-sized a(yv) array at the end, but its size is prepended to it).
Yeah.
>
> > Here is the config file for the daemon. Perhaps max_replies_per_connection
> > is being exceeded ?
>
> No.
ok, thanks.
>
> > Is that essentially maximum method calls per
> > connection ? Does the dbus daemon drop the connection when these are
> > exceeded ?
>
> No. That's maximum simultaneous replies that a connection may have, before the
> bus stops trying to track them. The reason the bus daemon tracks them at all
> is to provide timeout replies.
>
> --
> Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
> Senior Product Manager - Nokia, Qt Development Frameworks
> PGP/GPG: 0x6EF45358; fingerprint:
> E067 918B B660 DBD1 105C 966C 33F5 F005 6EF4 5358
>
More information about the dbus
mailing list