Hi All, I am using glib with GValue, GPtrArray to communicate with dbus. I have a big memory leak in my code. I am running an embedded target with glib 2.32.4. I am currently trying to code some little binary to detect the leak. I am not the author of the code so it is quite hard for me to debug it.
So I have currently for example a little main which does not leak at all on a desktop linux version (Fedora 17) which use the same glib version( perhaps not exactly the same verson but major, minor and macro number version seems to be the same. But when I run this piece of code on my embedded linux, I have a leak of 4 Bytes per loop iteration. Code is : #define SIZE_INNER_ARRAY 5 ... static void data_constructor_array_struct_string_array_struct_string_variant(GPtrArray *data, const gchar *client_objname) { guint member_count; GValueArray *outer_struct = g_value_array_new(1); GPtrArray *inner_array = g_ptr_array_new (); printf ("client objname : %s\n", client_objname); g_value_array_append(outer_struct, NULL); g_value_init(g_value_array_get_nth(outer_struct, 0), G_TYPE_STRING); g_value_set_string(g_value_array_get_nth(outer_struct, 0), client_objname); for(member_count=0;member_count < SIZE_INNER_ARRAY ;member_count++) { GValueArray *inner_struct = g_value_array_new(2); g_value_array_append(inner_struct, NULL); g_value_init(g_value_array_get_nth(inner_struct, 0), G_TYPE_STRING); char str[32]; sprintf (str, "TUTU%d", member_count); g_value_set_string(g_value_array_get_nth(inner_struct, 0), str); GValue *ptr = g_new0 (GValue, 1); g_value_init (ptr, G_TYPE_UINT); g_value_set_uint (ptr, member_count); g_value_array_append(inner_struct, NULL); g_value_init(g_value_array_get_nth(inner_struct, 1), G_TYPE_VALUE); g_value_set_static_boxed(g_value_array_get_nth(inner_struct, 1), ptr); //g_free(ptr); // can remove it, but use set_static instead of set g_ptr_array_add(inner_array, inner_struct); } g_value_array_append(outer_struct, NULL); g_value_init(g_value_array_get_nth(outer_struct, 1), dbus_g_type_get_collection("GPtrArray",dbus_g_type_get_struct ("GValueArray", G_TYPE_STRING, G_TYPE_VALUE, G_TYPE_INVALID))); g_value_set_boxed (g_value_array_get_nth(outer_struct, 1), inner_array); g_ptr_array_add(data, outer_struct); } int main (void) { GPtrArray *ptr_array = NULL; g_type_init (); //while (1) { ptr_array = g_ptr_array_new (); data_constructor_array_struct_string_array_struct_string_variant (ptr_array, "mon objet"); //sleep (3); } return 0; } To summarize the code. I have an outer_struct which is a GValueArray. First element is a gvalue with a string. Second element is inner_array which is a GPtrArray. Each element of inner_array is a innner_struct which is a GValueArray compose of two elements. As you can see in this example I am adding 5 inner_struct in the inner_array. Do I am doing something wrong in this code ? Do I have a memory leak in my glib version ? I hope that it is the good place to ask my request. Thanks & Regards Arthur. _______________________________________________ gnome-devel-list mailing list gnome-devel-list@gnome.org https://mail.gnome.org/mailman/listinfo/gnome-devel-list