dbus_pending_call_set_notify race
Alexander Larsson
alexl at redhat.com
Thu Nov 30 08:49:22 PST 2006
On Thu, 2006-11-30 at 10:09 -0500, Havoc Pennington wrote:
>
> Alexander Larsson wrote:
> > I just found something i think is racy in the dbus API.
> >
> > I'm calling dbus_connection_send_with_reply(), possibly not on the same
> > thread as the mainloop. This queues the message for delivery. It also
> > returns a DBusPendingCall so i can track recieving the message.
> >
> > However, what if the mainloop gets scheduled and gets a reply before I
> > call dbus_pending_call_set_notify. Won't this mean I will miss the
> > callback? Maybe it should detect that case and call the function (from
> > an idle (==timeout of zero))?
> >
>
> Right, you would miss the callback (though the reply would be stored in
> the PendingCall). The idle is the only fix I can think of... I guess I
> would do that inside set_notify (if the reply is already there when you
> set_notify, then queue an idle that will notify if the reply is still
> unused and do nothing if the reply was already taken)
>
> This is a little unusual case (using threads *and* async callbacks) so
> hopefully it isn't really biting a lot of people yet.
>
> A workaround might be to set_notify and then immediately check if the
> pending call is completed; if it isn't then you should get the notify.
Isn't that racy too? The notify might be called twice. It should really
be don inside dbus_pending_call_set_notify race so it can lock properly.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Alexander Larsson Red Hat, Inc
alexl at redhat.com alla at lysator.liu.se
He's a short-sighted neurotic senator on the run. She's a provocative
cigar-chomping pearl diver prone to fits of savage, blood-crazed rage. They
fight crime!
More information about the dbus
mailing list