[empathy: 58/148] Ensure the callbacks are only run once
- From: Cosimo Cecchi <cosimoc src gnome org>
- To: svn-commits-list gnome org
- Subject: [empathy: 58/148] Ensure the callbacks are only run once
- Date: Mon, 1 Jun 2009 12:12:27 -0400 (EDT)
commit 50577c500cd3a4ed96e024383c720264b130b416
Author: Cosimo Cecchi <cosimo cecchi collabora co uk>
Date: Tue May 5 17:42:23 2009 +0200
Ensure the callbacks are only run once
Also ensure that we get no progress callbacks after the transfer has
been cancelled.
---
libempathy/empathy-ft-handler.c | 3 +++
libempathy/empathy-tp-file.c | 12 ++++++++++++
2 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/libempathy/empathy-ft-handler.c b/libempathy/empathy-ft-handler.c
index 6746f81..b1861f6 100644
--- a/libempathy/empathy-ft-handler.c
+++ b/libempathy/empathy-ft-handler.c
@@ -419,6 +419,9 @@ ft_transfer_progress_callback (EmpathyTpFile *tp_file,
EmpathyFTHandler *handler = user_data;
EmpathyFTHandlerPriv *priv = GET_PRIV (handler);
+ if (empathy_ft_handler_is_cancelled (handler))
+ return;
+
if (transferred_bytes == 0)
{
priv->last_update_time = empathy_time_get_current ();
diff --git a/libempathy/empathy-tp-file.c b/libempathy/empathy-tp-file.c
index 0d27681..03dfb78 100644
--- a/libempathy/empathy-tp-file.c
+++ b/libempathy/empathy-tp-file.c
@@ -98,6 +98,8 @@ typedef struct {
EmpathyTpFileOperationCallback op_callback;
gpointer op_user_data;
+ gboolean is_closed;
+
gboolean dispose_run;
} EmpathyTpFilePriv;
@@ -160,6 +162,11 @@ ft_operation_close_clean (EmpathyTpFile *tp_file)
DEBUG ("FT operation close clean");
+ if (priv->is_closed)
+ return;
+ else
+ priv->is_closed = TRUE;
+
if (priv->op_callback)
priv->op_callback (tp_file, NULL, priv->op_user_data);
}
@@ -172,6 +179,11 @@ ft_operation_close_with_error (EmpathyTpFile *tp_file,
DEBUG ("FT operation close with error %s", error->message);
+ if (priv->is_closed)
+ return;
+ else
+ priv->is_closed = TRUE;
+
/* close the channel if it's not cancelled already */
if (priv->state != TP_FILE_TRANSFER_STATE_CANCELLED)
empathy_tp_file_cancel (tp_file);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]