diff options
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | Makefile.am | 4 | ||||
-rw-r--r-- | configure.ac | 11 | ||||
-rw-r--r-- | libempathy/empathy-tp-contact-list.c | 31 | ||||
-rw-r--r-- | tests/Makefile.am | 15 | ||||
-rw-r--r-- | tests/contact-manager.c | 30 |
6 files changed, 82 insertions, 18 deletions
@@ -1,5 +1,14 @@ 2007-09-21 Xavier Claessens <xclaesse@gmail.com> + * 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 <xclaesse@gmail.com> + * libempathy-gtk/empathy-contact-list-view.c: Fix ref count error for account objects. diff --git a/Makefile.am b/Makefile.am index f809c1028..3743916f5 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 a3e865f28..bade8bb30 100644 --- a/configure.ac +++ b/configure.ac @@ -205,6 +205,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 ----------------------------------------------------------- AC_ARG_ENABLE(python, @@ -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 16ecad807..ae178dd06 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 000000000..16358591d --- /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 000000000..c9450105a --- /dev/null +++ b/tests/contact-manager.c @@ -0,0 +1,30 @@ +#include <stdlib.h> + +#include <gtk/gtk.h> +#include <libempathy/empathy-contact-manager.h> + +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; +} |