From: Xavier Claessens Date: Fri, 21 Sep 2007 12:24:24 +0000 (+0000) Subject: Fix warnings when finalizing. X-Git-Url: https://git.0d.be/?p=empathy.git;a=commitdiff_plain;h=c657583832cbf675516a105c1f7bbc6bebea6e34 Fix warnings when finalizing. 2007-09-21 Xavier Claessens * libempathy/empathy-tp-contact-list.c: Fix warnings when finalizing. * tests/contact-manager.c: * tests/Makefile.am: * configure.ac: * Makefile.am: Add a test program to track leaks. svn path=/trunk/; revision=304 --- diff --git a/ChangeLog b/ChangeLog index f7330eb4..8bf03056 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2007-09-21 Xavier Claessens + + * libempathy/empathy-tp-contact-list.c: Fix warnings when finalizing. + + * tests/contact-manager.c: + * tests/Makefile.am: + * configure.ac: + * Makefile.am: Add a test program to track leaks. + 2007-09-21 Xavier Claessens * libempathy-gtk/empathy-contact-list-view.c: Fix ref count error for diff --git a/Makefile.am b/Makefile.am index f809c102..3743916f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -12,6 +12,10 @@ if HAVE_PYTHON SUBDIRS += python endif +if HAVE_TESTS +SUBDIRS += tests +endif + DISTCHECK_CONFIGURE_FLAGS = \ --disable-scrollkeeper \ --enable-gtk-doc diff --git a/configure.ac b/configure.ac index a3e865f2..bade8bb3 100644 --- a/configure.ac +++ b/configure.ac @@ -204,6 +204,16 @@ fi AM_CONDITIONAL(HAVE_NOTHERE, test "x$have_nothere" = "xyes") +dnl ----------------------------------------------------------- +dnl Tests +dnl ----------------------------------------------------------- +AC_ARG_ENABLE(tests, + AS_HELP_STRING([--enable-tests=@<:@no/yes@:>@], + [build tests]), , + enable_tests=no) + +AM_CONDITIONAL(HAVE_TESTS, test "x$enable_tests" = "xyes") + dnl ----------------------------------------------------------- dnl Python Bindings dnl ----------------------------------------------------------- @@ -271,4 +281,5 @@ AC_OUTPUT([ python/Makefile python/pyempathy/Makefile python/pyempathygtk/Makefile + tests/Makefile ]) diff --git a/libempathy/empathy-tp-contact-list.c b/libempathy/empathy-tp-contact-list.c index 16ecad80..ae178dd0 100644 --- a/libempathy/empathy-tp-contact-list.c +++ b/libempathy/empathy-tp-contact-list.c @@ -492,11 +492,19 @@ tp_contact_list_newchannel_cb (DBusGProxy *proxy, } static void -tp_contact_list_remove_all (EmpathyTpContactList *list) +tp_contact_list_destroy_cb (TpConn *tp_conn, + EmpathyTpContactList *list) { EmpathyTpContactListPriv *priv = GET_PRIV (list); GList *l; + empathy_debug (DEBUG_DOMAIN, "Account disconnected or CM crashed"); + + /* DBus proxie should NOT be used anymore */ + g_object_unref (priv->tp_conn); + priv->tp_conn = NULL; + + /* Remove all contacts */ for (l = priv->members; l; l = l->next) { g_signal_emit_by_name (list, "members-changed", l->data, NULL, 0, NULL, @@ -509,26 +517,10 @@ tp_contact_list_remove_all (EmpathyTpContactList *list) FALSE); g_object_unref (l->data); } - g_list_free (priv->members); g_list_free (priv->pendings); priv->members = NULL; priv->pendings = NULL; -} - -static void -tp_contact_list_destroy_cb (TpConn *tp_conn, - EmpathyTpContactList *list) -{ - EmpathyTpContactListPriv *priv = GET_PRIV (list); - - empathy_debug (DEBUG_DOMAIN, "Account disconnected or CM crashed"); - - /* DBus proxie should NOT be used anymore */ - g_object_unref (priv->tp_conn); - priv->tp_conn = NULL; - - tp_contact_list_remove_all (list); /* Tell the world to not use us anymore */ g_signal_emit (list, signals[DESTROY], 0); @@ -591,7 +583,6 @@ tp_contact_list_finalize (GObject *object) empathy_debug (DEBUG_DOMAIN, "finalize: %p", object); tp_contact_list_disconnect (list); - tp_contact_list_remove_all (list); if (priv->mc) { dbus_g_proxy_disconnect_signal (DBUS_G_PROXY (priv->mc), @@ -617,6 +608,10 @@ tp_contact_list_finalize (GObject *object) g_hash_table_destroy (priv->contacts_groups); g_list_foreach (priv->groups, (GFunc) g_object_unref, NULL); g_list_free (priv->groups); + g_list_foreach (priv->members, (GFunc) g_object_unref, NULL); + g_list_free (priv->members); + g_list_foreach (priv->pendings, (GFunc) g_object_unref, NULL); + g_list_free (priv->pendings); G_OBJECT_CLASS (empathy_tp_contact_list_parent_class)->finalize (object); } diff --git a/tests/Makefile.am b/tests/Makefile.am new file mode 100644 index 00000000..16358591 --- /dev/null +++ b/tests/Makefile.am @@ -0,0 +1,15 @@ +AM_CPPFLAGS = \ + -I$(top_srcdir) \ + $(EMPATHY_CFLAGS) \ + $(WARN_CFLAGS) + +LDADD = \ + $(top_builddir)/libempathy-gtk/libempathy-gtk.la \ + $(top_builddir)/libempathy/libempathy.la \ + $(EMPATHY_LIBS) + +noinst_PROGRAMS = \ + contact-manager + +contact_manager_SOURCES = contact-manager.c + diff --git a/tests/contact-manager.c b/tests/contact-manager.c new file mode 100644 index 00000000..c9450105 --- /dev/null +++ b/tests/contact-manager.c @@ -0,0 +1,30 @@ +#include + +#include +#include + +static gboolean +time_out (gpointer data) +{ + gtk_main_quit (); + + return FALSE; +} + +int +main (int argc, char **argv) +{ + EmpathyContactManager *manager; + + gtk_init (&argc, &argv); + + manager = empathy_contact_manager_new (); + + g_timeout_add (5000, time_out, NULL); + + gtk_main (); + + g_object_unref (manager); + + return EXIT_SUCCESS; +}