[empathy: 58/148] Ensure the callbacks are only run once



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]