aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--Makefile.am4
-rw-r--r--configure.ac11
-rw-r--r--libempathy/empathy-tp-contact-list.c31
-rw-r--r--tests/Makefile.am15
-rw-r--r--tests/contact-manager.c30
6 files changed, 82 insertions, 18 deletions
diff --git a/ChangeLog b/ChangeLog
index f7330eb44..8bf030565 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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;
+}