[nautilus] search-directory: disconnect leaked signals
- From: Carlos Soriano Sánchez <csoriano src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus] search-directory: disconnect leaked signals
- Date: Mon, 18 Jan 2016 12:20:44 +0000 (UTC)
commit 6b6428774aa28d87b8c721e66cde4ae06c2a1c8f
Author: Carlos Soriano <csoriano gnome org>
Date: Mon Jan 18 13:12:00 2016 +0100
search-directory: disconnect leaked signals
We were not disconnecting them, so they could be called after
the search-directory is freed, causing a crash.
To be honest, not sure how it survived until now, probably because
previously (I didn't check) the search engine was freed when stopped.
https://bugzilla.gnome.org/show_bug.cgi?id=759717
libnautilus-private/nautilus-search-directory.c | 41 +++++++++++++++++-----
1 files changed, 31 insertions(+), 10 deletions(-)
---
diff --git a/libnautilus-private/nautilus-search-directory.c b/libnautilus-private/nautilus-search-directory.c
index 5de492f..a920a85 100644
--- a/libnautilus-private/nautilus-search-directory.c
+++ b/libnautilus-private/nautilus-search-directory.c
@@ -746,6 +746,34 @@ clear_base_model (NautilusSearchDirectory *search)
}
static void
+search_connect_engine (NautilusSearchDirectory *search)
+{
+ g_signal_connect (search->details->engine, "hits-added",
+ G_CALLBACK (search_engine_hits_added),
+ search);
+ g_signal_connect (search->details->engine, "error",
+ G_CALLBACK (search_engine_error),
+ search);
+ g_signal_connect (search->details->engine, "finished",
+ G_CALLBACK (search_engine_finished),
+ search);
+}
+
+static void
+search_disconnect_engine (NautilusSearchDirectory *search)
+{
+ g_signal_handlers_disconnect_by_func (search->details->engine,
+ search_engine_hits_added,
+ search);
+ g_signal_handlers_disconnect_by_func (search->details->engine,
+ search_engine_error,
+ search);
+ g_signal_handlers_disconnect_by_func (search->details->engine,
+ search_engine_finished,
+ search);
+}
+
+static void
search_dispose (GObject *object)
{
NautilusSearchDirectory *search;
@@ -784,6 +812,7 @@ search_dispose (GObject *object)
g_clear_object (&search->details->query);
stop_search (search);
+ search_disconnect_engine(search);
g_clear_object (&search->details->engine);
@@ -810,16 +839,8 @@ nautilus_search_directory_init (NautilusSearchDirectory *search)
search->details->files_hash = g_hash_table_new (g_direct_hash, g_direct_equal);
- search->details->engine = nautilus_search_engine_new ();
- g_signal_connect (search->details->engine, "hits-added",
- G_CALLBACK (search_engine_hits_added),
- search);
- g_signal_connect (search->details->engine, "error",
- G_CALLBACK (search_engine_error),
- search);
- g_signal_connect (search->details->engine, "finished",
- G_CALLBACK (search_engine_finished),
- search);
+ search->details->engine = nautilus_search_engine_new ();
+ search_connect_engine (search);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]