[evolution-kolab/EDS_IMAPX_nobuild] updated IMAPX files as of EDS commit 87c4c85dd24ad9ccec973000c66bad2feaf37c39



commit da01c6a0c4fbe867e72b244e08fa392181402ca5
Author: Christian Hilberg <hilberg kernelconcepts de>
Date:   Thu Feb 2 11:06:36 2012 +0100

    updated IMAPX files as of EDS commit 87c4c85dd24ad9ccec973000c66bad2feaf37c39
    
    * updated the local IMAPX code from upstream
    * now at EDS commit
      87c4c85dd24ad9ccec973000c66bad2feaf37c39

 src/camel/providers/imapx/camel-imapx-command.c  |  130 ++++++++++++++++++++++
 src/camel/providers/imapx/camel-imapx-command.h  |   44 +++++++-
 src/camel/providers/imapx/camel-imapx-job.h      |    2 +-
 src/camel/providers/imapx/camel-imapx-provider.c |    2 -
 src/camel/providers/imapx/camel-imapx-server.c   |   91 ++++++++-------
 src/camel/providers/imapx/camel-imapx-server.h   |    7 +-
 6 files changed, 224 insertions(+), 52 deletions(-)
---
diff --git a/src/camel/providers/imapx/camel-imapx-command.c b/src/camel/providers/imapx/camel-imapx-command.c
index a8bf635..e8ba3cd 100644
--- a/src/camel/providers/imapx/camel-imapx-command.c
+++ b/src/camel/providers/imapx/camel-imapx-command.c
@@ -23,6 +23,7 @@
 #include <glib/gstdio.h>
 #include <glib/gi18n-lib.h>
 
+#include "camel-imapx-server.h"
 #include "camel-imapx-store.h"
 
 #define c(...) camel_imapx_debug(command, __VA_ARGS__)
@@ -44,6 +45,11 @@ struct _CamelIMAPXRealCommand {
 	gboolean done_sync_flag;
 };
 
+/* Safe to cast to a GQueue. */
+struct _CamelIMAPXCommandQueue {
+	GQueue g_queue;
+};
+
 CamelIMAPXCommand *
 camel_imapx_command_new (CamelIMAPXServer *is,
                          const gchar *name,
@@ -536,3 +542,127 @@ camel_imapx_command_set_error_if_failed (CamelIMAPXCommand *ic,
 	return FALSE;
 }
 
+CamelIMAPXCommandQueue *
+camel_imapx_command_queue_new (void)
+{
+	/* An initialized GQueue is simply zero-filled,
+	 * so we can skip calling g_queue_init() here. */
+	return g_slice_new0 (CamelIMAPXCommandQueue);
+}
+
+void
+camel_imapx_command_queue_free (CamelIMAPXCommandQueue *queue)
+{
+	CamelIMAPXCommand *ic;
+
+	g_return_if_fail (queue != NULL);
+
+	while ((ic = g_queue_pop_head ((GQueue *) queue)) != NULL)
+		camel_imapx_command_unref (ic);
+
+	g_slice_free (CamelIMAPXCommandQueue, queue);
+}
+
+void
+camel_imapx_command_queue_transfer (CamelIMAPXCommandQueue *from,
+                                    CamelIMAPXCommandQueue *to)
+{
+	GList *link;
+
+	g_return_if_fail (from != NULL);
+	g_return_if_fail (to != NULL);
+
+	while ((link = g_queue_pop_head_link ((GQueue *) from)) != NULL)
+		g_queue_push_tail_link ((GQueue *) to, link);
+}
+
+void
+camel_imapx_command_queue_push_tail (CamelIMAPXCommandQueue *queue,
+                                     CamelIMAPXCommand *ic)
+{
+	g_return_if_fail (queue != NULL);
+	g_return_if_fail (ic != NULL);
+
+	camel_imapx_command_ref (ic);
+
+	g_queue_push_tail ((GQueue *) queue, ic);
+}
+
+void
+camel_imapx_command_queue_insert_sorted (CamelIMAPXCommandQueue *queue,
+                                         CamelIMAPXCommand *ic)
+{
+	g_return_if_fail (queue != NULL);
+	g_return_if_fail (ic != NULL);
+
+	camel_imapx_command_ref (ic);
+
+	g_queue_insert_sorted (
+		(GQueue *) queue, ic, (GCompareDataFunc)
+		camel_imapx_command_compare, NULL);
+}
+
+gboolean
+camel_imapx_command_queue_is_empty (CamelIMAPXCommandQueue *queue)
+{
+	g_return_val_if_fail (queue != NULL, TRUE);
+
+	return g_queue_is_empty ((GQueue *) queue);
+}
+
+guint
+camel_imapx_command_queue_get_length (CamelIMAPXCommandQueue *queue)
+{
+	g_return_val_if_fail (queue != NULL, 0);
+
+	return g_queue_get_length ((GQueue *) queue);
+}
+
+CamelIMAPXCommand *
+camel_imapx_command_queue_peek_head (CamelIMAPXCommandQueue *queue)
+{
+	g_return_val_if_fail (queue != NULL, NULL);
+
+	return g_queue_peek_head ((GQueue *) queue);
+}
+
+GList *
+camel_imapx_command_queue_peek_head_link (CamelIMAPXCommandQueue *queue)
+{
+	g_return_val_if_fail (queue != NULL, NULL);
+
+	return g_queue_peek_head_link ((GQueue *) queue);
+}
+
+gboolean
+camel_imapx_command_queue_remove (CamelIMAPXCommandQueue *queue,
+                                  CamelIMAPXCommand *ic)
+{
+	g_return_val_if_fail (queue != NULL, FALSE);
+	g_return_val_if_fail (ic != NULL, FALSE);
+
+	if (g_queue_remove ((GQueue *) queue, ic)) {
+		camel_imapx_command_unref (ic);
+		return TRUE;
+	}
+
+	return FALSE;
+}
+
+void
+camel_imapx_command_queue_delete_link (CamelIMAPXCommandQueue *queue,
+                                       GList *link)
+{
+	g_return_if_fail (queue != NULL);
+	g_return_if_fail (link != NULL);
+
+	/* Verify the link is actually in the queue. */
+	if (g_queue_link_index ((GQueue *) queue, link) == -1) {
+		g_warning ("%s: Link not found in queue", G_STRFUNC);
+		return;
+	}
+
+	camel_imapx_command_unref ((CamelIMAPXCommand *) link->data);
+	g_queue_delete_link ((GQueue *) queue, link);
+}
+
diff --git a/src/camel/providers/imapx/camel-imapx-command.h b/src/camel/providers/imapx/camel-imapx-command.h
index 8c96621..b4ab2c2 100644
--- a/src/camel/providers/imapx/camel-imapx-command.h
+++ b/src/camel/providers/imapx/camel-imapx-command.h
@@ -19,21 +19,21 @@
 #ifndef CAMEL_IMAPX_COMMAND_H
 #define CAMEL_IMAPX_COMMAND_H
 
-#include <camel.h>
+#include <camel/camel.h>
 
-#include "camel-imapx-server.h"
 #include "camel-imapx-utils.h"
 
 G_BEGIN_DECLS
 
 /* Avoid a circular reference. */
 struct _CamelIMAPXJob;
+struct _CamelIMAPXServer;
 
 typedef struct _CamelIMAPXCommand CamelIMAPXCommand;
 typedef struct _CamelIMAPXCommandPart CamelIMAPXCommandPart;
 
 typedef gboolean
-		(*CamelIMAPXCommandFunc)	(CamelIMAPXServer *is,
+		(*CamelIMAPXCommandFunc)	(struct _CamelIMAPXServer *is,
 						 CamelIMAPXCommand *ic,
 						 GError **error);
 
@@ -65,7 +65,7 @@ struct _CamelIMAPXCommandPart {
 };
 
 struct _CamelIMAPXCommand {
-	CamelIMAPXServer *is;
+	struct _CamelIMAPXServer *is;
 	gint pri;
 
 	/* Command name/type (e.g. FETCH) */
@@ -88,7 +88,7 @@ struct _CamelIMAPXCommand {
 };
 
 CamelIMAPXCommand *
-		camel_imapx_command_new		(CamelIMAPXServer *is,
+		camel_imapx_command_new		(struct _CamelIMAPXServer *is,
 						 const gchar *name,
 						 CamelFolder *select,
 						 const gchar *format,
@@ -114,6 +114,40 @@ gboolean	camel_imapx_command_set_error_if_failed
 						(CamelIMAPXCommand *ic,
 						 GError **error);
 
+/* These are simple GQueue wrappers for CamelIMAPXCommands.
+ * They help make sure reference counting is done properly.
+ * Add more wrappers as needed, don't circumvent them. */
+
+typedef struct _CamelIMAPXCommandQueue CamelIMAPXCommandQueue;
+
+CamelIMAPXCommandQueue *
+		camel_imapx_command_queue_new	(void);
+void		camel_imapx_command_queue_free	(CamelIMAPXCommandQueue *queue);
+void		camel_imapx_command_queue_transfer
+						(CamelIMAPXCommandQueue *from,
+						 CamelIMAPXCommandQueue *to);
+void		camel_imapx_command_queue_push_tail
+						(CamelIMAPXCommandQueue *queue,
+						 CamelIMAPXCommand *ic);
+void		camel_imapx_command_queue_insert_sorted
+						(CamelIMAPXCommandQueue *queue,
+						 CamelIMAPXCommand *ic);
+gboolean	camel_imapx_command_queue_is_empty
+						(CamelIMAPXCommandQueue *queue);
+guint		camel_imapx_command_queue_get_length
+						(CamelIMAPXCommandQueue *queue);
+CamelIMAPXCommand *
+		camel_imapx_command_queue_peek_head
+						(CamelIMAPXCommandQueue *queue);
+GList *		camel_imapx_command_queue_peek_head_link
+						(CamelIMAPXCommandQueue *queue);
+gboolean	camel_imapx_command_queue_remove
+						(CamelIMAPXCommandQueue *queue,
+						 CamelIMAPXCommand *ic);
+void		camel_imapx_command_queue_delete_link
+						(CamelIMAPXCommandQueue *queue,
+						 GList *link);
+
 G_END_DECLS
 
 #endif /* CAMEL_IMAPX_COMMAND_H */
diff --git a/src/camel/providers/imapx/camel-imapx-job.h b/src/camel/providers/imapx/camel-imapx-job.h
index 0ca97e9..69f7bf4 100644
--- a/src/camel/providers/imapx/camel-imapx-job.h
+++ b/src/camel/providers/imapx/camel-imapx-job.h
@@ -19,7 +19,7 @@
 #ifndef CAMEL_IMAPX_JOB_H
 #define CAMEL_IMAPX_JOB_H
 
-#include <camel.h>
+#include <camel/camel.h>
 
 #include "camel-imapx-server.h"
 
diff --git a/src/camel/providers/imapx/camel-imapx-provider.c b/src/camel/providers/imapx/camel-imapx-provider.c
index f07fadc..116ff13 100644
--- a/src/camel/providers/imapx/camel-imapx-provider.c
+++ b/src/camel/providers/imapx/camel-imapx-provider.c
@@ -121,8 +121,6 @@ CamelServiceAuthType camel_imapx_password_authtype = {
 
 void camel_imapx_module_init (void);
 
-extern void imapx_utils_init (void);
-
 void
 camel_imapx_module_init (void)
 {
diff --git a/src/camel/providers/imapx/camel-imapx-server.c b/src/camel/providers/imapx/camel-imapx-server.c
index 493bba8..9eff1c2 100644
--- a/src/camel/providers/imapx/camel-imapx-server.c
+++ b/src/camel/providers/imapx/camel-imapx-server.c
@@ -508,11 +508,11 @@ imapx_command_start (CamelIMAPXServer *is,
 	if (cp_continuation || cp_literal_plus)
 		is->literal = ic;
 
-	g_queue_push_tail (&is->active, ic);
+	camel_imapx_command_queue_push_tail (is->active, ic);
 
 	g_static_rec_mutex_lock (&is->ostream_lock);
 
-	c(is->tagprefix, "Starting command (active=%d,%s) %c%05u %s\r\n", g_queue_get_length (&is->active), is->literal?" literal":"", is->tagprefix, ic->tag, cp->data && g_str_has_prefix (cp->data, "LOGIN") ? "LOGIN..." : cp->data);
+	c(is->tagprefix, "Starting command (active=%d,%s) %c%05u %s\r\n", camel_imapx_command_queue_get_length (is->active), is->literal?" literal":"", is->tagprefix, ic->tag, cp->data && g_str_has_prefix (cp->data, "LOGIN") ? "LOGIN..." : cp->data);
 	if (is->stream != NULL) {
 		gchar *string;
 
@@ -540,7 +540,7 @@ imapx_command_start (CamelIMAPXServer *is,
 err:
 	g_static_rec_mutex_unlock (&is->ostream_lock);
 
-	g_queue_remove (&is->active, ic);
+	camel_imapx_command_queue_remove (is->active, ic);
 
 	/* Send a NULL GError since we've already set a
 	 * GError to get here, and we're not interested
@@ -607,7 +607,7 @@ imapx_command_start_next (CamelIMAPXServer *is,
 
 		c(is->tagprefix, "-- Checking job queue for non-folder jobs\n");
 
-		head = g_queue_peek_head_link (&is->queue);
+		head = camel_imapx_command_queue_peek_head_link (is->queue);
 
 		/* Tag which commands in the queue to start. */
 		for (link = head; link != NULL; link = g_list_next (link)) {
@@ -633,7 +633,7 @@ imapx_command_start_next (CamelIMAPXServer *is,
 		/* Start the tagged commands. */
 		while ((link = g_queue_pop_head (&start)) != NULL) {
 			CamelIMAPXCommand *ic = link->data;
-			g_queue_delete_link (&is->queue, link);
+			camel_imapx_command_queue_delete_link (is->queue, link);
 			imapx_command_start (is, ic, cancellable, error);
 		}
 
@@ -643,7 +643,7 @@ imapx_command_start_next (CamelIMAPXServer *is,
 	if (imapx_idle_supported (is) && is->state == IMAPX_SELECTED) {
 		gboolean empty = imapx_is_command_queue_empty (is);
 
-		if (imapx_in_idle (is) && !g_queue_is_empty (&is->queue)) {
+		if (imapx_in_idle (is) && !camel_imapx_command_queue_is_empty (is->queue)) {
 			/* if imapx_stop_idle() returns FALSE, it was only
 			 * pending and we can go ahead and send a new command
 			 * immediately. If it returns TRUE, either it sent the
@@ -660,7 +660,7 @@ imapx_command_start_next (CamelIMAPXServer *is,
 		}
 	}
 
-	if (g_queue_is_empty (&is->queue)) {
+	if (camel_imapx_command_queue_is_empty (is->queue)) {
 		c(is->tagprefix, "* no, no jobs\n");
 		return;
 	}
@@ -674,7 +674,7 @@ imapx_command_start_next (CamelIMAPXServer *is,
 		c(is->tagprefix, "- we're selected on '%s', current jobs?\n",
 		  camel_folder_get_full_name (is->select_folder));
 
-		head = g_queue_peek_head_link (&is->active);
+		head = camel_imapx_command_queue_peek_head_link (is->active);
 
 		/* Find the highest priority in the active queue. */
 		for (link = head; link != NULL; link = g_list_next (link)) {
@@ -684,14 +684,14 @@ imapx_command_start_next (CamelIMAPXServer *is,
 			c(is->tagprefix, "-  %3d '%s'\n", (gint)ic->pri, ic->name);
 		}
 
-		if (g_queue_get_length (&is->active) >= MAX_COMMANDS) {
+		if (camel_imapx_command_queue_get_length (is->active) >= MAX_COMMANDS) {
 			c(is->tagprefix, "** too many jobs busy, waiting for results for now\n");
 			return;
 		}
 
 		c(is->tagprefix, "-- Checking job queue\n");
 
-		head = g_queue_peek_head_link (&is->queue);
+		head = camel_imapx_command_queue_peek_head_link (is->queue);
 
 		/* Tag which commands in the queue to start. */
 		for (link = head; link != NULL; link = g_list_next (link)) {
@@ -723,7 +723,7 @@ imapx_command_start_next (CamelIMAPXServer *is,
 		/* Start the tagged commands. */
 		while ((link = g_queue_pop_head (&start)) != NULL) {
 			CamelIMAPXCommand *ic = link->data;
-			g_queue_delete_link (&is->queue, link);
+			camel_imapx_command_queue_delete_link (is->queue, link);
 			imapx_command_start (is, ic, cancellable, error);
 			commands_started = TRUE;
 		}
@@ -733,7 +733,7 @@ imapx_command_start_next (CamelIMAPXServer *is,
 	}
 
 	/* This won't be NULL because we checked for an empty queue above. */
-	first_ic = g_queue_peek_head (&is->queue);
+	first_ic = camel_imapx_command_queue_peek_head (is->queue);
 
 	/* If we need to select a folder for the first command, do it now,
 	 * once it is complete it will re-call us if it succeeded. */
@@ -748,7 +748,7 @@ imapx_command_start_next (CamelIMAPXServer *is,
 
 		min_pri = first_ic->pri;
 
-		head = g_queue_peek_head_link (&is->queue);
+		head = camel_imapx_command_queue_peek_head_link (is->queue);
 
 		/* Tag which commands in the queue to start. */
 		for (link = head; link != NULL; link = g_list_next (link)) {
@@ -774,7 +774,7 @@ imapx_command_start_next (CamelIMAPXServer *is,
 		/* Start the tagged commands. */
 		while ((link = g_queue_pop_head (&start)) != NULL) {
 			CamelIMAPXCommand *ic = link->data;
-			g_queue_delete_link (&is->queue, link);
+			camel_imapx_command_queue_delete_link (is->queue, link);
 			imapx_command_start (is, ic, cancellable, error);
 		}
 	}
@@ -783,10 +783,10 @@ imapx_command_start_next (CamelIMAPXServer *is,
 static gboolean
 imapx_is_command_queue_empty (CamelIMAPXServer *is)
 {
-	if (!g_queue_is_empty (&is->queue))
+	if (!camel_imapx_command_queue_is_empty (is->queue))
 		return FALSE;
 
-	if (!g_queue_is_empty (&is->active))
+	if (!camel_imapx_command_queue_is_empty (is->active))
 		return FALSE;
 
 	return TRUE;
@@ -821,9 +821,7 @@ imapx_command_queue (CamelIMAPXServer *is,
 		return;
 	}
 
-	g_queue_insert_sorted (
-		&is->queue, ic, (GCompareDataFunc)
-		camel_imapx_command_compare, NULL);
+	camel_imapx_command_queue_insert_sorted (is->queue, ic);
 
 	imapx_command_start_next (is, ic->job->cancellable, NULL);
 
@@ -847,7 +845,7 @@ imapx_find_command_tag (CamelIMAPXServer *is,
 		goto exit;
 	}
 
-	head = g_queue_peek_head_link (&is->active);
+	head = camel_imapx_command_queue_peek_head_link (is->active);
 
 	for (link = head; link != NULL; link = g_list_next (link)) {
 		CamelIMAPXCommand *candidate = link->data;
@@ -875,7 +873,7 @@ imapx_match_active_job (CamelIMAPXServer *is,
 
 	QUEUE_LOCK (is);
 
-	head = g_queue_peek_head_link (&is->active);
+	head = camel_imapx_command_queue_peek_head_link (is->active);
 
 	for (link = head; link != NULL; link = g_list_next (link)) {
 		CamelIMAPXCommand *ic = link->data;
@@ -1757,8 +1755,10 @@ imapx_completion (CamelIMAPXServer *is,
 
 	QUEUE_LOCK (is);
 
-	g_queue_remove (&is->active, ic);
-	g_queue_push_tail (&is->done, ic);
+	camel_imapx_command_ref (ic);
+	camel_imapx_command_queue_remove (is->active, ic);
+	camel_imapx_command_queue_push_tail (is->done, ic);
+	camel_imapx_command_unref (ic);
 
 	if (is->literal == ic)
 		is->literal = NULL;
@@ -1771,7 +1771,7 @@ imapx_completion (CamelIMAPXServer *is,
 		return FALSE;
 	}
 
-	g_queue_remove (&is->done, ic);
+	camel_imapx_command_queue_remove (is->done, ic);
 
 	QUEUE_UNLOCK (is);
 
@@ -1843,7 +1843,7 @@ imapx_command_run (CamelIMAPXServer *is,
 		is->literal = NULL;
 
 	QUEUE_LOCK (is);
-	g_queue_remove (&is->active, ic);
+	camel_imapx_command_queue_remove (is->active, ic);
 	QUEUE_UNLOCK (is);
 
 	return success;
@@ -2319,10 +2319,10 @@ imapx_command_select_done (CamelIMAPXServer *is,
 
 		QUEUE_LOCK (is);
 
-		head = g_queue_peek_head_link (&is->queue);
+		head = camel_imapx_command_queue_peek_head_link (is->queue);
 
 		if (is->select_pending) {
-			head = g_queue_peek_head_link (&is->queue);
+			head = camel_imapx_command_queue_peek_head_link (is->queue);
 
 			for (link = head; link != NULL; link = g_list_next (link)) {
 				CamelIMAPXCommand *cw = link->data;
@@ -2337,7 +2337,7 @@ imapx_command_select_done (CamelIMAPXServer *is,
 
 		while ((link = g_queue_pop_head (&trash)) != NULL) {
 			CamelIMAPXCommand *cw = link->data;
-			g_queue_delete_link (&is->queue, link);
+			camel_imapx_command_queue_delete_link (is->queue, link);
 			g_queue_push_tail (&failed, cw);
 		}
 
@@ -2446,7 +2446,7 @@ imapx_select (CamelIMAPXServer *is,
 	if (is->select_folder == folder && !forced)
 		return TRUE;
 
-	if (!g_queue_is_empty (&is->active))
+	if (!camel_imapx_command_queue_is_empty (is->active))
 		return TRUE;
 
 	is->select_pending = folder;
@@ -4884,20 +4884,26 @@ static void
 cancel_all_jobs (CamelIMAPXServer *is,
                  GError *error)
 {
-	CamelIMAPXCommand *ic;
-	GQueue queue = G_QUEUE_INIT;
+	CamelIMAPXCommandQueue *queue;
+	GList *head, *link;
 
-	QUEUE_LOCK (is);
+	/* Transfer all pending and active commands to a separate
+	 * command queue to complete them without holding QUEUE_LOCK. */
+
+	queue = camel_imapx_command_queue_new ();
 
-	while ((ic = g_queue_pop_head (&is->queue)) != NULL)
-		g_queue_push_tail (&queue, ic);
+	QUEUE_LOCK (is);
 
-	while ((ic = g_queue_pop_head (&is->active)) != NULL)
-		g_queue_push_tail (&queue, ic);
+	camel_imapx_command_queue_transfer (is->queue, queue);
+	camel_imapx_command_queue_transfer (is->active, queue);
 
 	QUEUE_UNLOCK (is);
 
-	while ((ic = g_queue_pop_head (&queue)) != NULL) {
+	head = camel_imapx_command_queue_peek_head_link (queue);
+
+	for (link = head; link != NULL; link = g_list_next (link)) {
+		CamelIMAPXCommand *ic = link->data;
+
 		if (ic->job->error == NULL)
 			ic->job->error = g_error_copy (error);
 
@@ -4906,6 +4912,8 @@ cancel_all_jobs (CamelIMAPXServer *is,
 		 * in individual command errors. */
 		ic->complete (is, ic, NULL);
 	}
+
+	camel_imapx_command_queue_free (queue);
 }
 
 /* ********************************************************************** */
@@ -4972,7 +4980,7 @@ imapx_parser_thread (gpointer d)
 			gint is_empty;
 
 			QUEUE_LOCK (is);
-			is_empty = g_queue_is_empty (&is->active);
+			is_empty = camel_imapx_command_queue_is_empty (is->active);
 			QUEUE_UNLOCK (is);
 
 			if (is_empty || (imapx_idle_supported (is) && imapx_in_idle (is))) {
@@ -5134,9 +5142,10 @@ camel_imapx_server_class_init (CamelIMAPXServerClass *class)
 static void
 camel_imapx_server_init (CamelIMAPXServer *is)
 {
-	g_queue_init (&is->queue);
-	g_queue_init (&is->active);
-	g_queue_init (&is->done);
+	is->queue = camel_imapx_command_queue_new ();
+	is->active = camel_imapx_command_queue_new ();
+	is->done = camel_imapx_command_queue_new ();
+
 	g_queue_init (&is->jobs);
 
 	/* not used at the moment. Use it in future */
diff --git a/src/camel/providers/imapx/camel-imapx-server.h b/src/camel/providers/imapx/camel-imapx-server.h
index a5de8a6..d6921b3 100644
--- a/src/camel/providers/imapx/camel-imapx-server.h
+++ b/src/camel/providers/imapx/camel-imapx-server.h
@@ -22,6 +22,7 @@
 
 #include <camel/camel.h>
 
+#include "camel-imapx-command.h"
 #include "camel-imapx-stream.h"
 #include "camel-imapx-store-summary.h"
 
@@ -82,9 +83,9 @@ struct _CamelIMAPXServer {
 	 * all the time, so they can be cleaned up in exception cases */
 	GStaticRecMutex queue_lock;
 	CamelIMAPXCommand *literal;
-	GQueue queue;
-	GQueue active;
-	GQueue done;
+	CamelIMAPXCommandQueue *queue;
+	CamelIMAPXCommandQueue *active;
+	CamelIMAPXCommandQueue *done;
 
 	/* info on currently selected folder */
 	CamelFolder *select_folder;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]