Using Gio::init() instead of g_type_init() does not make a difference.
There is still a leak:


==2885== LEAK SUMMARY:
==2885==    definitely lost: 40 bytes in 1 blocks
==2885==    indirectly lost: 120 bytes in 10 blocks
==2885==      possibly lost: 13,975 bytes in 258 blocks
==2885==    still reachable: 79,346 bytes in 1,424 blocks
==2885==         suppressed: 0 bytes in 0 blocks


Here is a full valgrind summary: https://gist.github.com/3432925
Also, I tried to reset RefPtr's pointer with `file.reset();` but that does
not help. Is there any method of Gio::File which is supposed to do closing
or cleanup?

2012/8/23 José Alburquerque <[email protected]>

> On Wed, 2012-08-22 at 09:19 +0600, Галымжан wrote:
> > I have giomm 2.30.0 and glibmm 2.30.0. Test program:
> >
> >
> >
> >
> > #include <iostream>
> > #include <glibmm.h>
> > #include <giomm.h>
> >
> >
> > int main(int argc, char const *argv[]) {
> >   g_type_init();
> >   Glib::RefPtr<Gio::File> file =
> > Gio::File::create_for_path("test.txt");
> >   if (file->query_exists()) {
> >     std::cout << "File is there" << std::endl;
> >   }
> >   return 0;
> > }
> >
> >
> >
> >
> > Compilation and running:
> >
> >
> >
> >
> > > g++ giomm-test.cpp -o giomm-test `pkg-config --libs --cflags
> > giomm-2.4`
> > > valgrind --leak-check=full --show-possibly-lost=no giomm-test
> >
> >
> > (process:3152): glibmm-CRITICAL **: Glib::ObjectBase*
> > Glib::wrap_create_new_wrapper_for_interface(GObject*, GType):
> > assertion `wrap_func_table != 0' failed
> >
> >
> > (process:3152): GLib-GObject-CRITICAL **: g_object_set_qdata_full:
> > assertion `quark > 0' failed
> > ==3152==
> > ==3152== HEAP SUMMARY:
> > ==3152==     in use at exit: 69,660 bytes in 956 blocks
> > ==3152==   total heap usage: 1,569 allocs, 613 frees, 247,744 bytes
> > allocated
> > ==3152==
> > ==3152== 24 bytes in 1 blocks are definitely lost in loss record 370
> > of 577
> > ==3152==    at 0x402842F: operator new(unsigned int)
> > (vg_replace_malloc.c:255)
> > ==3152==    by 0x40CB4B6: Gio::File*
> > Glib::wrap_auto_interface<Gio::File>(_GObject*, bool)
> > (in /usr/lib/libgiomm-2.4.so.1.3.0)
> > ==3152==    by 0x40CAB9E: Glib::wrap(_GFile*, bool)
> > (in /usr/lib/libgiomm-2.4.so.1.3.0)
> > ==3152==    by 0x42BE112: (below main) (libc-start.c:226)
> > ==3152==
> > ==3152== 160 (40 direct, 120 indirect) bytes in 1 blocks are
> > definitely lost in loss record 520 of 577
> > ==3152==    at 0x4028876: malloc (vg_replace_malloc.c:236)
> > ==3152==    by 0x438964C: nss_parse_service_list (nsswitch.c:626)
> > ==3152==    by 0x4389C59: __nss_database_lookup (nsswitch.c:167)
> > ==3152==    by 0x4C502F8: ???
> > ==3152==    by 0x4C51A5D: ???
> > ==3152==    by 0x4340956: getpwnam_r@@GLIBC_2.1.2 (getXXbyYY_r.c:256)
> > ==3152==    by 0x4659695: ???
> > (in /lib/i386-linux-gnu/libglib-2.0.so.0.3200.0)
> > ==3152==    by 0x61687A6C: ???
> > ==3152==
> > ==3152== LEAK SUMMARY:
> > ==3152==    definitely lost: 64 bytes in 2 blocks
> > ==3152==    indirectly lost: 120 bytes in 10 blocks
> > ==3152==      possibly lost: 15,175 bytes in 268 blocks
> > ==3152==    still reachable: 54,301 bytes in 676 blocks
> > ==3152==         suppressed: 0 bytes in 0 blocks
> > ==3152== Reachable blocks (those to which a pointer was found) are not
> > shown.
> > ==3152== To see them, rerun with: --leak-check=full
> > --show-reachable=yes
> > ==3152==
> > ==3152== For counts of detected and suppressed errors, rerun with: -v
> > ==3152== ERROR SUMMARY: 92 errors from 92 contexts (suppressed: 69
> > from 13)
> >
> >
> >
> >
> > Why is there a memory leak? If I don't use Gio::File there is no
> > memory leak.
>
> Could you try with Gio::init() instead of g_type_init() and see if that
> makes a difference?
>
> > _______________________________________________
> > gtkmm-list mailing list
> > [email protected]
> > https://mail.gnome.org/mailman/listinfo/gtkmm-list
>
> --
> José
>
>
_______________________________________________
gtkmm-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/gtkmm-list

Reply via email to