[anjuta] symbol-db: Fixed some more crashes
- From: Naba Kumar <naba src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [anjuta] symbol-db: Fixed some more crashes
- Date: Sun, 21 Feb 2010 11:25:20 +0000 (UTC)
commit 2c56d4d5ef6547c03ea0d5a250b14588719b4a20
Author: Naba Kumar <naba gnome org>
Date: Sun Feb 21 13:25:02 2010 +0200
symbol-db: Fixed some more crashes
Makes sure cancel operation is not anymore allowed (by disconnecting from it) after comand
is finished. Takes care of another race condition where cancel would still arrive (because
the other end hasn't got the command-finished signal) while command has finnished this
end (and command object finalized) resulting in crash.
plugins/symbol-db/symbol-db-iface.c | 35 +++++++++++++++++++++++++----------
1 files changed, 25 insertions(+), 10 deletions(-)
---
diff --git a/plugins/symbol-db/symbol-db-iface.c b/plugins/symbol-db/symbol-db-iface.c
index 3dc7dea..92c30af 100644
--- a/plugins/symbol-db/symbol-db-iface.c
+++ b/plugins/symbol-db/symbol-db-iface.c
@@ -366,16 +366,6 @@ on_sdb_search_command_data_arrived (AnjutaCommand *command,
}
static void
-on_sdb_search_command_finished (SymbolDBSearchCommand *search_command,
- guint return_code,
- AnjutaAsyncNotify *notify)
-{
- if (!symbol_db_search_command_get_cancelled (search_command) && notify)
- anjuta_async_notify_notify_finished (notify);
- g_object_unref (search_command); /* Fully done */
-}
-
-static void
on_sdb_search_command_cancelled (GCancellable *cancellable,
AnjutaCommand *command)
{
@@ -388,9 +378,32 @@ on_sdb_search_command_cancelled (GCancellable *cancellable,
g_signal_handlers_disconnect_by_func (cancellable,
on_sdb_search_command_cancelled,
command);
+ g_object_set_data (G_OBJECT (command), "cancellable", NULL);
g_object_unref (cancellable);
}
+static void
+on_sdb_search_command_finished (SymbolDBSearchCommand *search_command,
+ guint return_code,
+ AnjutaAsyncNotify *notify)
+{
+ GCancellable *cancel;
+
+ DEBUG_PRINT ("sdb search finished %p", search_command);
+
+ if (!symbol_db_search_command_get_cancelled (search_command) && notify)
+ anjuta_async_notify_notify_finished (notify);
+
+ cancel = g_object_get_data (G_OBJECT (search_command), "cancellable");
+ if (cancel)
+ {
+ g_signal_handlers_disconnect_by_func (cancel, on_sdb_search_command_cancelled, search_command);
+ g_object_unref (cancel);
+ g_object_set_data (G_OBJECT (search_command), "cancellable", NULL);
+ }
+ g_object_unref (search_command); /* Fully done */
+}
+
static gint
do_search_prj_glb_async (SymbolDBSearchCommand *search_command, guint cmd_id,
GCancellable* cancel, AnjutaAsyncNotify *notify,
@@ -424,6 +437,7 @@ do_search_prj_glb_async (SymbolDBSearchCommand *search_command, guint cmd_id,
g_signal_connect (G_OBJECT (cancel), "cancelled",
G_CALLBACK (on_sdb_search_command_cancelled),
search_command);
+ g_object_set_data (G_OBJECT (search_command), "cancellable", cancel);
}
anjuta_command_start (ANJUTA_COMMAND (search_command));
@@ -629,6 +643,7 @@ isymbol_manager_search_file_async (IAnjutaSymbolManager *sm, IAnjutaSymbolType m
g_signal_connect (G_OBJECT (cancel), "cancelled",
G_CALLBACK (on_sdb_search_command_cancelled),
search_command);
+ g_object_set_data (G_OBJECT (search_command), "cancellable", cancel);
}
anjuta_command_start (ANJUTA_COMMAND (search_command));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]