On Tue, 2013-01-15 at 09:50 +0100, David Henningsson wrote:
> On 01/12/2013 07:22 PM, Tanu Kaskinen wrote:
> > Bug found by David Henningsson.
> > ---
> >   reserve-monitor.c |   74 
> > +++++++++++++++++++++++++++++++++++++++++++----------
> >   1 file changed, 60 insertions(+), 14 deletions(-)
> >
> > diff --git a/reserve-monitor.c b/reserve-monitor.c
> > index 4097a6f..39a0c77 100644
> > --- a/reserve-monitor.c
> > +++ b/reserve-monitor.c
> > @@ -59,6 +59,22 @@ struct rm_monitor {
> >     "member='NameOwnerChanged',"            \
> >     "arg0='%s'"
> >
> > +static unsigned get_busy(
> > +   DBusConnection *c,
> > +   const char *name_owner) {
> > +
> > +   const char *un;
> > +
> > +   if (!name_owner || !*name_owner)
> > +           return FALSE;
> > +
> > +   if ((un = dbus_bus_get_unique_name(c)))
> > +           if (strcmp(name_owner, un) == 0)
> > +                   return FALSE;
> > +
> > +   return TRUE;
> > +}
> > +
> >   static DBusHandlerResult filter_handler(
> >     DBusConnection *c,
> >     DBusMessage *s,
> > @@ -87,16 +103,7 @@ static DBusHandlerResult filter_handler(
> >             if (strcmp(name, m->service_name) == 0) {
> >                     unsigned old_busy = m->busy;
> >
> > -                   m->busy = !!(new && *new);
> > -
> > -                   /* If we ourselves own the device, then don't consider 
> > this 'busy' */
> 
> This comment got lost. Should be moved to the get_busy function

Ok.

> 
> > -                   if (m->busy) {
> > -                           const char *un;
> > -
> > -                           if ((un = dbus_bus_get_unique_name(c)))
> > -                                   if (strcmp(new, un) == 0)
> > -                                           m->busy = FALSE;
> > -                   }
> > +                   m->busy = get_busy(c, new);
> >
> >                     if (m->busy != old_busy && m->change_cb) {
> >                             m->ref++;
> > @@ -115,11 +122,13 @@ invalid:
> >   int rm_watch(
> >     rm_monitor **_m,
> >     DBusConnection *connection,
> > -   const char*device_name,
> > +   const char *device_name,
> >     rm_change_cb_t change_cb,
> >     DBusError *error)  {
> >
> >     rm_monitor *m = NULL;
> > +   DBusMessage *msg = NULL, *reply = NULL;
> > +   const char *name_owner;
> >     int r;
> >     DBusError _error;
> >
> > @@ -178,13 +187,44 @@ int rm_watch(
> >
> >     m->matching = 1;
> >
> > -   m->busy = dbus_bus_name_has_owner(m->connection, m->service_name, 
> > error);
> > +   if (!(msg = dbus_message_new_method_call(DBUS_SERVICE_DBUS, 
> > DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS, "GetNameOwner"))) {
> > +           r = -ENOMEM;
> > +           goto fail;
> > +   }
> 
> The rm_watch function is long enough already - I'd prefer if you move 
> the new code to a separate get_name_ower function (even if that would 
> mean a strdup).

Will do.

-- 
Tanu

_______________________________________________
pulseaudio-discuss mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss

Reply via email to