+ MODEST_DEBUG_BLOCK (print_queue_item (mail_op, "remove"););
+
+ g_signal_handlers_disconnect_by_func (G_OBJECT (mail_op),
+ G_CALLBACK (on_operation_finished),
+ self);
+
+ /* Notify observers */
+ g_signal_emit (self, signals[QUEUE_CHANGED_SIGNAL], 0,
+ mail_op, MODEST_MAIL_OPERATION_QUEUE_OPERATION_REMOVED);
+
+ /* Check errors */
+ status = modest_mail_operation_get_status (mail_op);
+ if (status != MODEST_MAIL_OPERATION_STATUS_SUCCESS) {
+ /* This is a sanity check. Shouldn't be needed, but
+ prevent possible application crashes. It's useful
+ also for detecting mail operations with invalid
+ status and error handling */
+ if (modest_mail_operation_get_error (mail_op) != NULL) {
+ modest_mail_operation_execute_error_handler (mail_op);
+ } else {
+ if (status == MODEST_MAIL_OPERATION_STATUS_CANCELED)
+ g_warning ("%s: operation canceled \n", __FUNCTION__);
+ else
+ g_warning ("%s: possible error in a mail operation " \
+ "implementation. The status is not successful " \
+ "but the mail operation does not have any " \
+ "error set\n", __FUNCTION__);
+ }
+ }
+
+ /* Free object */
+
+ /* We do not own the last reference when this operation is deleted
+ * as response to a progress changed signal from the mail operation
+ * itself, in which case the glib signal system owns a reference
+ * until the signal emission is complete. armin. */
+ /* modest_runtime_verify_object_last_ref (mail_op, ""); */