Show folders with non read messages with active text color
[modest] / src / modest-mail-operation-queue.c
index 720e668..68506d9 100644 (file)
@@ -452,63 +452,72 @@ typedef struct
 static void
 on_find_by_source_foreach (gpointer op, gpointer data)
 {
-       FindBySourceInfo *info = (FindBySourceInfo*) data; 
+       FindBySourceInfo *info = (FindBySourceInfo*) data;
+       GObject *source = NULL;
 
-       if ( info->source == modest_mail_operation_get_source (MODEST_MAIL_OPERATION (op))) {
+       source = modest_mail_operation_get_source (MODEST_MAIL_OPERATION (op));
+       if (info->source == source) {
                g_object_ref (G_OBJECT (op));
                *(info->new_list) = g_slist_prepend (*(info->new_list), MODEST_MAIL_OPERATION (op));
        }
+       if (source)
+               g_object_unref (source);
 }
 
 GSList*
-modest_mail_operation_queue_get_by_source (
-               ModestMailOperationQueue *self, 
-               GObject *source)
+modest_mail_operation_queue_get_by_source (ModestMailOperationQueue *self,
+                                          GObject *source)
 {
        ModestMailOperationQueuePrivate *priv;
        GSList* found_operations= NULL;
-       FindBySourceInfo *info = g_new0 (FindBySourceInfo, 1);
+       FindBySourceInfo *info;
 
        g_return_val_if_fail (MODEST_IS_MAIL_OPERATION_QUEUE (self), NULL);
        g_return_val_if_fail (source != NULL, NULL);
-       
+
        priv = MODEST_MAIL_OPERATION_QUEUE_GET_PRIVATE(self);
 
+       info = g_new0 (FindBySourceInfo, 1);
        info->new_list = &found_operations;
        info->source = source;
-       
+
        g_mutex_lock (priv->queue_lock);
        g_queue_foreach (priv->op_queue, (GFunc) on_find_by_source_foreach, info);
        g_mutex_unlock (priv->queue_lock);
-       
+
        g_free (info);
-       
+
        return found_operations;
 }
 
 static void
 accumulate_mail_op_strings (ModestMailOperation *op, gchar **str)
 {
-       *str = g_strdup_printf ("%s\n%s", *str, modest_mail_operation_to_string (op));
+       gchar *mail_op_to_str = modest_mail_operation_to_string (op);
+       *str = g_strdup_printf ("%s\n%s", *str, mail_op_to_str);
+       g_free (mail_op_to_str);
 }
 
 
 gchar*
 modest_mail_operation_queue_to_string (ModestMailOperationQueue *self)
 {
-       gchar *str;
+       gchar *str = NULL;
        guint len;
        ModestMailOperationQueuePrivate *priv;
-       
+
        g_return_val_if_fail (MODEST_IS_MAIL_OPERATION_QUEUE (self), NULL);
-       
+
        priv = MODEST_MAIL_OPERATION_QUEUE_GET_PRIVATE(self);
 
        len = g_queue_get_length (priv->op_queue);
        str = g_strdup_printf ("mail operation queue (%02d)\n-------------------------", len);
-       if (len == 0)
-               str = g_strdup_printf ("%s\n%s", str, "<empty>");
-       else {
+       if (len == 0) {
+               gchar *copy;
+               copy = str;
+               str = g_strdup_printf ("%s\n%s", copy, "<empty>");
+               g_free (copy);
+       } else {
                g_mutex_lock (priv->queue_lock);
                g_queue_foreach (priv->op_queue, (GFunc)accumulate_mail_op_strings, &str);
                g_mutex_unlock (priv->queue_lock);