diff options
-rw-r--r-- | libempathy/empathy-ft-handler.c | 3 | ||||
-rw-r--r-- | 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 6746f8127..b1861f6dd 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 0d276818b..03dfb7875 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); |