Daemon using dbus to send messages seems to use lots of memory without release them.
Sanel Zukan
sanelz at gmail.com
Tue Dec 25 01:39:06 PST 2012
On what distro are you running this example? On my system (Fedora 17,
dbus-1.4.10, dbus-glib-0.98-2) works without problems. Now, I'm not
dbus-glib expert but you can try to downgrade dbus or dbus-glib
versions until you find which does memory leaks.
...or you can stick with dbus 1.4 and dbus-glib 0.98.
Sanel
On 12/25/2012 08:21 AM, Croach wrote:
> 2012/12/25 Croach <croach at gmail.com>:
>> Hi,
>>
>> I have do porting dbus-1.6.4 to a embedded system, and I find that the
>> memory of the daemon using dbus grows till the daemon runs out of the
>> memory.
>> I have put the following sample program to a function and run it for
>> 10000 times with Valgrind.
>>
>> http://dbus.freedesktop.org/doc/dbus-tutorial.html#sample-program-1
>
> I have updated the program we tested with Valgrind.
> We use glib-2.28.8, dbus-glib-0.100.
>
> #include <dbus/dbus.h>
> #include <dbus/dbus-glib.h>
> #include <stdlib.h>
>
> int test()
> {
> DBusGConnection *connection;
> GError *error;
> DBusGProxy *proxy;
> char **name_list;
> char **name_list_ptr;
>
> g_type_init ();
>
> error = NULL;
> connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
> if (connection == NULL)
> {
> g_printerr ("Failed to open connection to bus: %s\n", error->message);
> g_error_free (error);
> exit (1);
> }
>
> /* Create a proxy object for the "bus driver" (name
"org.freedesktop.DBus") */
>
> proxy = dbus_g_proxy_new_for_name (connection,
> DBUS_SERVICE_DBUS,
> DBUS_PATH_DBUS,
> DBUS_INTERFACE_DBUS);
>
> /* Call ListNames method, wait for reply */
> error = NULL;
> if (!dbus_g_proxy_call (proxy, "ListNames", &error, G_TYPE_INVALID,
> G_TYPE_STRV, &name_list, G_TYPE_INVALID))
> {
> /* Just do demonstrate remote exceptions versus regular GError */
> if (error->domain == DBUS_GERROR && error->code ==
> DBUS_GERROR_REMOTE_EXCEPTION)
> g_printerr ("Caught remote method exception %s: %s",
> dbus_g_error_get_name (error),
> error->message);
> else
> g_printerr ("Error: %s\n", error->message);
> g_error_free (error);
> exit (1);
> }
>
> /* Print the results */
>
> g_print ("Names on the message bus:\n");
>
> for (name_list_ptr = name_list; *name_list_ptr; name_list_ptr++)
> {
> g_print (" %s\n", *name_list_ptr);
> }
> g_strfreev (name_list);
>
> g_type_class_ref(proxy);
> g_object_unref (proxy);
> proxy = NULL;
> name_list = NULL;
>
> return 0;
> }
>
> int main()
> {
> int count = 10000;
> while (count -- > 0) {
> test();
> }
> }
>>
>> The memory grows up and valgrind reports that "still reachable" with
some bytes.
>> I know that the meaning of "still reachable" is not memory leak, but
>> the program uses lots of memory.
>> So I would like to know what have I missed anything about running the
>> sample program or should I use any function to release the memory
>> after using g_object_unref()?
>>
>> Thanks for any help.
>> Croach Chang
> _______________________________________________
> dbus mailing list
> dbus at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dbus
More information about the dbus
mailing list