dbus_connection_read_write_dispatch sometimes causing 100% cpu usage

Burton Samograd burton at userful.com
Mon Sep 13 08:08:55 PDT 2010


Ray Strode <halfline at gmail.com> writes:

> On Fri, Sep 10, 2010 at 3:32 PM, Havoc Pennington <hp at pobox.com> wrote:
>> This makes me suspect you're recursing and re-entering dispatch
>> (trying to _dbus_connection_acquire_dispatch() twice without releasing
>> it)
>>
>>> Here is a stack trace from where I am in the loop:
>>>
>>> #0  _dbus_connection_acquire_dispatch (connection=0x1053c00) at dbus-connection.c:3864
>>> #1  0x00007f96c57726bb in dbus_connection_dispatch (connection=0x1053c00) at dbus-connection.c:4303
>>> #2  0x00007f96c5770654 in _dbus_connection_read_write_dispatch (connection=0x1053c00,
>>>    timeout_milliseconds=100, dispatch=1) at dbus-connection.c:3431
>>> #3  0x00007f96c5770a22 in dbus_connection_read_write_dispatch (connection=0x1053c00,
>>>    timeout_milliseconds=100) at dbus-connection.c:3513
>> It looks like you somehow have read_write_dispatch from inside
>> read_write_dispatch, and the inner read_write_dispatch is waiting for
>> the outer one to give up dispatch_acquired (i.e.
>> _dbus_connection_release_dispatch())
> Note frame 3 doesn't have a leading underscore and frame 2 does, so
> probably not recursion (unless gdb is hiding frames or something)
>
> Looking through the code there is one call that does
> _dbus_connection_acquire_dispatch() without doing release_dispatch
> before returning and that's
>
> dbus_connection_borrow_message
>
> So if the code was singled threaded, and called borrow_message, then
> called read_write_dispatch without first calling return_message, I
> think it would infinite loop too.  Do you use that function, Burton?

I'm not using that function, so no I don't think that would be the cause
of the problem.

> Alternatively, maybe heap corruption that valgrind would pick up on
> ...

I've been meaning to run it through valgrind but haven't had a chance to
yet.  I'll probably get around to that today and see what it can tell
me.

Thanks.

--
Burton Samograd



More information about the dbus mailing list