From: "Liu, Raymond" <raymond.liu@intel.com>
To: Marcel Holtmann <marcel@holtmann.org>
Cc: "linux-bluetooth@vger.kernel.org" <linux-bluetooth@vger.kernel.org>
Subject: RE: Can we change org.openobex.Client's dbus node path?
Date: Mon, 24 Nov 2008 13:39:52 +0800 [thread overview]
Message-ID: <0463F45F3606F4428ED35AC8C709F92E0217AAF9@pdsmsx502.ccr.corp.intel.com> (raw)
In-Reply-To: <C0D77808-B8E7-4BF3-81D8-52EE39667C6C@holtmann.org>
>
>this is a bug in gdbus then. The exactly same code is used in
>bluetoothd and connmand so it seems weird. Did you try to debug it
>where it actually fails to get this wrong? Are we missing some
>"invalidate parent" calls?
>
>Regards
>
>Marcel
Hi Marcel
I found the reason. During interface register object_path_unref did call i=
nvalidate_parent_data. But for our case: we have path "/" at first, and we =
register interface at "/org/openobex/Session0", there are no data for "/org=
/openobex", so no any parent introspect data is invalidated. But the whole =
/org/openobex path is created for the first time. So actually the "/"'s int=
rospect data need to be invalidated.
I modify the code as below to invalidate the parent data up to "/", so that=
it will fix this problem.
-------------------------------------------------------------------
diff --git a/gdbus/object.c b/gdbus/object.c
old mode 100644
new mode 100755
index a417ab9..074f40b
--- a/gdbus/object.c
+++ b/gdbus/object.c
@@ -299,25 +299,28 @@ static void invalidate_parent_data(DBusConnection *co=
nn, const char *child_path)
char *parent_path, *slash;
parent_path =3D g_strdup(child_path);
- slash =3D strrchr(parent_path, '/');
- if (!slash)
- goto done;
-
- *slash =3D '\0';
- if (!strlen(parent_path))
- goto done;
+ do{
+ slash =3D strrchr(parent_path, '/');
+ if (!slash)
+ break;
- if (!dbus_connection_get_object_path_data(conn, parent_path,
- (void *) &data))
- goto done;
+ if (slash =3D=3D parent_path) {
+ *(slash+1) =3D '\0';
+ } else {
+ *slash =3D '\0';
+ }
- if (!data)
- goto done;
+ if (!dbus_connection_get_object_path_data(conn, parent_path=
,
+ (void *) &d=
ata))
+ continue;
- g_free(data->introspect);
- data->introspect =3D NULL;
+ if (!data)
+ continue;
-done:
+ g_free(data->introspect);
+ data->introspect =3D NULL;
+ }while(slash !=3D parent_path);
+
g_free(parent_path);
}
-------------------------------------------------------------------------
However, It got some drawback here: if part of the parent path did exist be=
fore, and the parent's parents data do not need to change. This fix will do=
much more thing then it should. I guess to found out all the change up to =
the necessay level will need more code. So I just make it simple here.
Raymond
next prev parent reply other threads:[~2008-11-24 5:39 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-24 2:01 Can we change org.openobex.Client's dbus node path? Liu, Raymond
2008-11-24 2:41 ` Marcel Holtmann
2008-11-24 3:24 ` Liu, Raymond
2008-11-24 3:30 ` Marcel Holtmann
2008-11-24 5:39 ` Liu, Raymond [this message]
2008-11-24 5:48 ` Liu, Raymond
2008-11-24 8:29 ` Marcel Holtmann
2008-11-24 10:11 ` Liu, Raymond
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0463F45F3606F4428ED35AC8C709F92E0217AAF9@pdsmsx502.ccr.corp.intel.com \
--to=raymond.liu@intel.com \
--cc=linux-bluetooth@vger.kernel.org \
--cc=marcel@holtmann.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox