[empathy: 53/148] Properly ref/unref the request table
- From: Cosimo Cecchi <cosimoc src gnome org>
- To: svn-commits-list gnome org
- Subject: [empathy: 53/148] Properly ref/unref the request table
- Date: Mon, 1 Jun 2009 12:12:02 -0400 (EDT)
commit 04cc954b2551b7c6c622a630bfc54d55edbe81ab
Author: Cosimo Cecchi <cosimo cecchi collabora co uk>
Date: Tue May 5 15:02:23 2009 +0200
Properly ref/unref the request table
Destroy the request table early, and keep a reference when passing it to
the dispatcher.
Also, don't cancel the nonexistant EmpathyTpFile when stopping hashing.
---
libempathy/empathy-ft-handler.c | 21 ++++++++++++++-------
1 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/libempathy/empathy-ft-handler.c b/libempathy/empathy-ft-handler.c
index ad497de..e5c18cb 100644
--- a/libempathy/empathy-ft-handler.c
+++ b/libempathy/empathy-ft-handler.c
@@ -410,6 +410,10 @@ ft_handler_create_channel_cb (EmpathyDispatchOperation *operation,
DEBUG ("Dispatcher create channel CB");
+ /* we can destroy now the request */
+ g_hash_table_destroy (priv->request);
+ priv->request = NULL;
+
if (my_error == NULL)
{
g_cancellable_set_error_if_cancelled (priv->cancellable, &my_error);
@@ -447,8 +451,9 @@ ft_handler_push_to_dispatcher (EmpathyFTHandler *handler)
dispatcher = empathy_dispatcher_dup_singleton ();
account = empathy_contact_get_account (priv->contact);
- empathy_dispatcher_create_channel (dispatcher, account, priv->request,
- ft_handler_create_channel_cb, handler);
+ /* I want to own a reference to the request, and destroy it later */
+ empathy_dispatcher_create_channel (dispatcher, account,
+ g_hash_table_ref (priv->request), ft_handler_create_channel_cb, handler);
g_object_unref (dispatcher);
}
@@ -606,8 +611,6 @@ hash_job_async_read_cb (GObject *source,
gssize bytes_read;
GError *error = NULL;
- DEBUG ("Reading a chunk for hashing.");
-
bytes_read = g_input_stream_read_finish (hash_data->stream, res, &error);
if (error != NULL)
{
@@ -952,9 +955,13 @@ empathy_ft_handler_cancel_transfer (EmpathyFTHandler *handler)
priv = GET_PRIV (handler);
- g_return_if_fail (priv->tpfile != NULL);
-
- empathy_tp_file_cancel (priv->tpfile);
+ /* if we don't have an EmpathyTpFile, we are hashing, so
+ * we can just cancel the GCancellable to stop it.
+ */
+ if (priv->tpfile == NULL)
+ g_cancellable_cancel (priv->cancellable);
+ else
+ empathy_tp_file_cancel (priv->tpfile);
}
void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]