Matthew Barnes ab6285
--- /dev/null	2007-03-08 09:20:11.212292094 -0500
Matthew Barnes ab6285
+++ evolution-data-server-1.9.92/libedataserver/e-flag.c	2007-03-08 17:16:18.000000000 -0500
Matthew Barnes ab6285
@@ -0,0 +1,171 @@
Matthew Barnes ab6285
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
Matthew Barnes ab6285
+/* 
Matthew Barnes ab6285
+ * Copyright (C) 2007 Novell, Inc.
Matthew Barnes ab6285
+ *
Matthew Barnes ab6285
+ * This library is free software; you can redistribute it and/or
Matthew Barnes ab6285
+ * modify it under the terms of version 2 of the GNU Lesser General Public
Matthew Barnes ab6285
+ * License as published by the Free Software Foundation.
Matthew Barnes ab6285
+ *
Matthew Barnes ab6285
+ * This program is distributed in the hope that it will be useful,
Matthew Barnes ab6285
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
Matthew Barnes ab6285
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Matthew Barnes ab6285
+ * General Public License for more details.
Matthew Barnes ab6285
+ *
Matthew Barnes ab6285
+ * You should have received a copy of the GNU Lesser General Public
Matthew Barnes ab6285
+ * License along with this library; if not, write to the
Matthew Barnes ab6285
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Matthew Barnes ab6285
+ * Boston, MA 02111-1307, USA.
Matthew Barnes ab6285
+ */
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+#include "e-flag.h"
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+struct _EFlag {
Matthew Barnes ab6285
+	GCond *cond;
Matthew Barnes ab6285
+	GMutex *mutex;
Matthew Barnes ab6285
+	gboolean is_set;
Matthew Barnes ab6285
+};
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+/**
Matthew Barnes ab6285
+ * e_flag_new:
Matthew Barnes ab6285
+ *
Matthew Barnes ab6285
+ * Creates a new #EFlag object.  It is initially unset.
Matthew Barnes ab6285
+ *
Matthew Barnes ab6285
+ * Returns: a new #EFlag
Matthew Barnes ab6285
+ **/
Matthew Barnes ab6285
+EFlag *
Matthew Barnes ab6285
+e_flag_new (void)
Matthew Barnes ab6285
+{
Matthew Barnes ab6285
+	EFlag *flag;
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+	flag = g_slice_new (EFlag);
Matthew Barnes ab6285
+	flag->cond = g_cond_new ();
Matthew Barnes ab6285
+	flag->mutex = g_mutex_new ();
Matthew Barnes ab6285
+	flag->is_set = FALSE;
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+	return flag;
Matthew Barnes ab6285
+}
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+/**
Matthew Barnes ab6285
+ * e_flag_is_set:
Matthew Barnes ab6285
+ * @flag: an #EFlag
Matthew Barnes ab6285
+ *
Matthew Barnes ab6285
+ * Returns the state of @flag.
Matthew Barnes ab6285
+ *
Matthew Barnes ab6285
+ * Returns: %TRUE if @flag is set
Matthew Barnes ab6285
+ **/
Matthew Barnes ab6285
+gboolean
Matthew Barnes ab6285
+e_flag_is_set (EFlag *flag)
Matthew Barnes ab6285
+{
Matthew Barnes ab6285
+	gboolean is_set;
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+	g_return_val_if_fail (flag != NULL, FALSE);
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+	g_mutex_lock (flag->mutex);
Matthew Barnes ab6285
+	is_set = flag->is_set;
Matthew Barnes ab6285
+	g_mutex_unlock (flag->mutex);
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+	return is_set;
Matthew Barnes ab6285
+}
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+/**
Matthew Barnes ab6285
+ * e_flag_set:
Matthew Barnes ab6285
+ * @flag: an #EFlag
Matthew Barnes ab6285
+ *
Matthew Barnes ab6285
+ * Sets @flag.  All threads waiting on @flag are woken up.  Threads that
Matthew Barnes ab6285
+ * call e_flag_wait() or e_flag_timed_wait() once @flag is set will not
Matthew Barnes ab6285
+ * block at all.
Matthew Barnes ab6285
+ **/
Matthew Barnes ab6285
+void
Matthew Barnes ab6285
+e_flag_set (EFlag *flag)
Matthew Barnes ab6285
+{
Matthew Barnes ab6285
+	g_return_if_fail (flag != NULL);
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+	g_mutex_lock (flag->mutex);
Matthew Barnes ab6285
+	flag->is_set = TRUE;
Matthew Barnes ab6285
+	g_cond_broadcast (flag->cond);
Matthew Barnes ab6285
+	g_mutex_unlock (flag->mutex);
Matthew Barnes ab6285
+}
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+/**
Matthew Barnes ab6285
+ * e_flag_clear:
Matthew Barnes ab6285
+ * @flag: an #EFlag
Matthew Barnes ab6285
+ *
Matthew Barnes ab6285
+ * Unsets @flag.  Subsequent calls to e_flag_wait() or e_flag_timed_wait()
Matthew Barnes ab6285
+ * will block until @flag is set.
Matthew Barnes ab6285
+ **/
Matthew Barnes ab6285
+void
Matthew Barnes ab6285
+e_flag_clear (EFlag *flag)
Matthew Barnes ab6285
+{
Matthew Barnes ab6285
+	g_return_if_fail (flag != NULL);
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+	g_mutex_lock (flag->mutex);
Matthew Barnes ab6285
+	flag->is_set = FALSE;
Matthew Barnes ab6285
+	g_mutex_unlock (flag->mutex);
Matthew Barnes ab6285
+}
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+/**
Matthew Barnes ab6285
+ * e_flag_wait:
Matthew Barnes ab6285
+ * @flag: an #EFlag
Matthew Barnes ab6285
+ *
Matthew Barnes ab6285
+ * Blocks until @flag is set.  If @flag is already set, the function returns
Matthew Barnes ab6285
+ * immediately.
Matthew Barnes ab6285
+ **/
Matthew Barnes ab6285
+void
Matthew Barnes ab6285
+e_flag_wait (EFlag *flag)
Matthew Barnes ab6285
+{
Matthew Barnes ab6285
+	g_return_if_fail (flag != NULL);
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+	g_mutex_lock (flag->mutex);
Matthew Barnes ab6285
+	while (!flag->is_set)
Matthew Barnes ab6285
+		g_cond_wait (flag->cond, flag->mutex);
Matthew Barnes ab6285
+	g_mutex_unlock (flag->mutex);
Matthew Barnes ab6285
+}
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+/**
Matthew Barnes ab6285
+ * e_flag_timed_wait:
Matthew Barnes ab6285
+ * @flag: an #EFlag
Matthew Barnes ab6285
+ * @abs_time: a #GTimeVal, determining the final time
Matthew Barnes ab6285
+ *
Matthew Barnes ab6285
+ * Blocks until @flag is set, or until the time specified by @abs_time.
Matthew Barnes ab6285
+ * If @flag is already set, the function returns immediately.  The return
Matthew Barnes ab6285
+ * value indicates the state of @flag after waiting.
Matthew Barnes ab6285
+ *
Matthew Barnes ab6285
+ * If @abs_time is %NULL, e_flag_timed_wait() acts like e_flag_wait().
Matthew Barnes ab6285
+ *
Matthew Barnes ab6285
+ * To easily calculate @abs_time, a combination of g_get_current_time() and
Matthew Barnes ab6285
+ * g_time_val_add() can be used.
Matthew Barnes ab6285
+ *
Matthew Barnes ab6285
+ * Returns: %TRUE if @flag is now set
Matthew Barnes ab6285
+ **/
Matthew Barnes ab6285
+gboolean
Matthew Barnes ab6285
+e_flag_timed_wait (EFlag *flag, GTimeVal *abs_time)
Matthew Barnes ab6285
+{
Matthew Barnes ab6285
+	gboolean is_set;
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+	g_return_val_if_fail (flag != NULL, FALSE);
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+	g_mutex_lock (flag->mutex);
Matthew Barnes ab6285
+	while (!flag->is_set)
Matthew Barnes ab6285
+		if (!g_cond_timed_wait (flag->cond, flag->mutex, abs_time))
Matthew Barnes ab6285
+			break;
Matthew Barnes ab6285
+	is_set = flag->is_set;
Matthew Barnes ab6285
+	g_mutex_unlock (flag->mutex);
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+	return is_set;
Matthew Barnes ab6285
+}
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+/**
Matthew Barnes ab6285
+ * e_flag_free:
Matthew Barnes ab6285
+ * @flag: an #EFlag
Matthew Barnes ab6285
+ *
Matthew Barnes ab6285
+ * Destroys @flag.
Matthew Barnes ab6285
+ **/
Matthew Barnes ab6285
+void
Matthew Barnes ab6285
+e_flag_free (EFlag *flag)
Matthew Barnes ab6285
+{
Matthew Barnes ab6285
+	g_return_if_fail (flag != NULL);
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+	g_cond_free (flag->cond);
Matthew Barnes ab6285
+	g_mutex_free (flag->mutex);
Matthew Barnes ab6285
+	g_slice_free (EFlag, flag);
Matthew Barnes ab6285
+}
Matthew Barnes ab6285
--- /dev/null	2007-03-08 09:20:11.212292094 -0500
Matthew Barnes ab6285
+++ evolution-data-server-1.9.92/libedataserver/e-flag.h	2007-03-08 17:16:18.000000000 -0500
Matthew Barnes ab6285
@@ -0,0 +1,43 @@
Matthew Barnes ab6285
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
Matthew Barnes ab6285
+/* 
Matthew Barnes ab6285
+ * Copyright (C) 2007 Novell, Inc.
Matthew Barnes ab6285
+ *
Matthew Barnes ab6285
+ * This library is free software; you can redistribute it and/or
Matthew Barnes ab6285
+ * modify it under the terms of version 2 of the GNU Lesser General Public
Matthew Barnes ab6285
+ * License as published by the Free Software Foundation.
Matthew Barnes ab6285
+ *
Matthew Barnes ab6285
+ * This program is distributed in the hope that it will be useful,
Matthew Barnes ab6285
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
Matthew Barnes ab6285
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Matthew Barnes ab6285
+ * General Public License for more details.
Matthew Barnes ab6285
+ *
Matthew Barnes ab6285
+ * You should have received a copy of the GNU Lesser General Public
Matthew Barnes ab6285
+ * License along with this library; if not, write to the
Matthew Barnes ab6285
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Matthew Barnes ab6285
+ * Boston, MA 02111-1307, USA.
Matthew Barnes ab6285
+ */
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+#ifndef E_FLAG_H
Matthew Barnes ab6285
+#define E_FLAG_H
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+/* An EFlag is essentially a binary semaphore with a more intuitive interface.
Matthew Barnes ab6285
+ * Based on Python's threading.Event class ("EEvent" was already taken). */
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+#include <glib.h>
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+G_BEGIN_DECLS
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+typedef struct _EFlag EFlag;
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+EFlag *		e_flag_new			(void);
Matthew Barnes ab6285
+gboolean	e_flag_is_set			(EFlag *flag);
Matthew Barnes ab6285
+void		e_flag_set			(EFlag *flag);
Matthew Barnes ab6285
+void		e_flag_clear			(EFlag *flag);
Matthew Barnes ab6285
+void		e_flag_wait			(EFlag *flag);
Matthew Barnes ab6285
+gboolean	e_flag_timed_wait		(EFlag *flag,
Matthew Barnes ab6285
+						 GTimeVal *abs_time);
Matthew Barnes ab6285
+void		e_flag_free			(EFlag *flag);
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+G_END_DECLS
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+#endif /* E_FLAG_H */
Matthew Barnes ab6285
--- evolution-data-server-1.9.92/libedataserver/Makefile.in.e-flag	2007-02-26 08:32:13.000000000 -0500
Matthew Barnes ab6285
+++ evolution-data-server-1.9.92/libedataserver/Makefile.in	2007-03-08 17:16:18.000000000 -0500
Matthew Barnes ab6285
@@ -69,7 +69,7 @@
Matthew Barnes ab6285
 am_libedataserver_1_2_la_OBJECTS = $(am__objects_1) e-account-list.lo \
Matthew Barnes ab6285
 	e-account.lo e-categories.lo e-component-listener.lo \
Matthew Barnes ab6285
 	e-data-server-module.lo e-dbhash.lo e-db3-utils.lo \
Matthew Barnes ab6285
-	e-file-cache.lo e-iconv.lo e-iterator.lo e-list.lo \
Matthew Barnes ab6285
+	e-file-cache.lo e-flag.lo e-iconv.lo e-iterator.lo e-list.lo \
Matthew Barnes ab6285
 	e-list-iterator.lo e-memory.lo e-msgport.lo e-sexp.lo \
Matthew Barnes ab6285
 	e-source-group.lo e-source-list.lo e-source.lo e-time-utils.lo \
Matthew Barnes ab6285
 	e-uid.lo e-url.lo e-data-server-util.lo e-trie.lo \
Matthew Barnes ab6285
@@ -420,6 +420,7 @@
Matthew Barnes ab6285
 	e-dbhash.c			\
Matthew Barnes ab6285
 	e-db3-utils.c			\
Matthew Barnes ab6285
 	e-file-cache.c			\
Matthew Barnes ab6285
+	e-flag.c			\
Matthew Barnes ab6285
 	e-iconv.c			\
Matthew Barnes ab6285
 	e-iterator.c			\
Matthew Barnes ab6285
 	e-list.c			\
Matthew Barnes ab6285
@@ -459,6 +460,7 @@
Matthew Barnes ab6285
 	e-db3-utils.h			\
Matthew Barnes ab6285
 	e-dbhash.h			\
Matthew Barnes ab6285
 	e-file-cache.h			\
Matthew Barnes ab6285
+	e-flag.h			\
Matthew Barnes ab6285
 	e-iconv.h			\
Matthew Barnes ab6285
 	e-iterator.h			\
Matthew Barnes ab6285
 	e-list.h			\
Matthew Barnes ab6285
@@ -577,6 +579,7 @@
Matthew Barnes ab6285
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e-db3-utils.Plo@am__quote@
Matthew Barnes ab6285
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e-dbhash.Plo@am__quote@
Matthew Barnes ab6285
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e-file-cache.Plo@am__quote@
Matthew Barnes ab6285
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e-flag.Plo@am__quote@
Matthew Barnes ab6285
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e-iconv.Plo@am__quote@
Matthew Barnes ab6285
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e-iterator.Plo@am__quote@
Matthew Barnes ab6285
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e-list-iterator.Plo@am__quote@
Matthew Barnes ab6285
--- evolution-data-server-1.9.92/libedataserver/Makefile.am.e-flag	2007-01-03 09:56:27.000000000 -0500
Matthew Barnes ab6285
+++ evolution-data-server-1.9.92/libedataserver/Makefile.am	2007-03-08 17:16:18.000000000 -0500
Matthew Barnes ab6285
@@ -26,6 +26,7 @@
Matthew Barnes ab6285
 	e-dbhash.c			\
Matthew Barnes ab6285
 	e-db3-utils.c			\
Matthew Barnes ab6285
 	e-file-cache.c			\
Matthew Barnes ab6285
+	e-flag.c			\
Matthew Barnes ab6285
 	e-iconv.c			\
Matthew Barnes ab6285
 	e-iterator.c			\
Matthew Barnes ab6285
 	e-list.c			\
Matthew Barnes ab6285
@@ -66,6 +67,7 @@
Matthew Barnes ab6285
 	e-db3-utils.h			\
Matthew Barnes ab6285
 	e-dbhash.h			\
Matthew Barnes ab6285
 	e-file-cache.h			\
Matthew Barnes ab6285
+	e-flag.h			\
Matthew Barnes ab6285
 	e-iconv.h			\
Matthew Barnes ab6285
 	e-iterator.h			\
Matthew Barnes ab6285
 	e-list.h			\
Matthew Barnes ab6285
--- evolution-data-server-1.9.92/addressbook/backends/file/e-book-backend-file.c.e-flag	2007-01-03 09:56:28.000000000 -0500
Matthew Barnes ab6285
+++ evolution-data-server-1.9.92/addressbook/backends/file/e-book-backend-file.c	2007-03-09 00:22:01.000000000 -0500
Matthew Barnes ab6285
@@ -43,6 +43,7 @@
Matthew Barnes ab6285
 #include "libedataserver/e-dbhash.h"
Matthew Barnes ab6285
 #include "libedataserver/e-db3-utils.h"
Matthew Barnes ab6285
 #include "libedataserver/e-data-server-util.h"
Matthew Barnes ab6285
+#include "libedataserver/e-flag.h"
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 #include "libebook/e-contact.h"
Matthew Barnes ab6285
 
Matthew Barnes ab6285
@@ -479,18 +480,15 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 typedef struct {
Matthew Barnes ab6285
 	EBookBackendFile *bf;
Matthew Barnes ab6285
-	GMutex *mutex;
Matthew Barnes ab6285
-	GCond *cond;
Matthew Barnes ab6285
 	GThread *thread;
Matthew Barnes ab6285
-	gboolean stopped;
Matthew Barnes ab6285
+	EFlag *running;
Matthew Barnes ab6285
 } FileBackendSearchClosure;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
 closure_destroy (FileBackendSearchClosure *closure)
Matthew Barnes ab6285
 {
Matthew Barnes ab6285
 	d(printf ("destroying search closure\n"));
Matthew Barnes ab6285
-	g_mutex_free (closure->mutex);
Matthew Barnes ab6285
-	g_cond_free (closure->cond);
Matthew Barnes ab6285
+	e_flag_free (closure->running);
Matthew Barnes ab6285
 	g_free (closure);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
@@ -500,10 +498,8 @@
Matthew Barnes ab6285
 	FileBackendSearchClosure *closure = g_new (FileBackendSearchClosure, 1);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	closure->bf = bf;
Matthew Barnes ab6285
-	closure->mutex = g_mutex_new ();
Matthew Barnes ab6285
-	closure->cond = g_cond_new ();
Matthew Barnes ab6285
 	closure->thread = NULL;
Matthew Barnes ab6285
-	closure->stopped = FALSE;
Matthew Barnes ab6285
+	closure->running = e_flag_new ();
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	g_object_set_data_full (G_OBJECT (book_view), "EBookBackendFile.BookView::closure",
Matthew Barnes ab6285
 				closure, (GDestroyNotify)closure_destroy);
Matthew Barnes ab6285
@@ -527,7 +523,7 @@
Matthew Barnes ab6285
 	DB  *db;
Matthew Barnes ab6285
 	DBT id_dbt, vcard_dbt;
Matthew Barnes ab6285
 	int db_error;
Matthew Barnes ab6285
-	gboolean stopped = FALSE, allcontacts;
Matthew Barnes ab6285
+	gboolean allcontacts;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	d(printf ("starting initial population of book view\n"));
Matthew Barnes ab6285
 
Matthew Barnes ab6285
@@ -547,9 +543,7 @@
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	d(printf ("signalling parent thread\n"));
Matthew Barnes ab6285
-	g_mutex_lock (closure->mutex);
Matthew Barnes ab6285
-	g_cond_signal (closure->cond);
Matthew Barnes ab6285
-	g_mutex_unlock (closure->mutex);
Matthew Barnes ab6285
+	e_flag_set (closure->running);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	if (e_book_backend_summary_is_summary_query (bf->priv->summary, query)) {
Matthew Barnes ab6285
 		/* do a summary query */
Matthew Barnes ab6285
@@ -558,11 +552,8 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		for (i = 0; i < ids->len; i ++) {
Matthew Barnes ab6285
 			char *id = g_ptr_array_index (ids, i);
Matthew Barnes ab6285
-			g_mutex_lock (closure->mutex);
Matthew Barnes ab6285
-			stopped = closure->stopped;
Matthew Barnes ab6285
-			g_mutex_unlock (closure->mutex);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-			if (stopped)
Matthew Barnes ab6285
+			if (!e_flag_is_set (closure->running))
Matthew Barnes ab6285
 				break;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 			string_to_dbt (id, &id_dbt);
Matthew Barnes ab6285
@@ -595,11 +586,7 @@
Matthew Barnes ab6285
 			db_error = dbc->c_get(dbc, &id_dbt, &vcard_dbt, DB_FIRST);
Matthew Barnes ab6285
 			while (db_error == 0) {
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-				g_mutex_lock (closure->mutex);
Matthew Barnes ab6285
-				stopped = closure->stopped;
Matthew Barnes ab6285
-				g_mutex_unlock (closure->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
-				if (stopped)
Matthew Barnes ab6285
+				if (!e_flag_is_set (closure->running))
Matthew Barnes ab6285
 					break;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 				/* don't include the version in the list of cards */
Matthew Barnes ab6285
@@ -628,7 +615,7 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	if (!stopped)
Matthew Barnes ab6285
+	if (e_flag_is_set (closure->running))
Matthew Barnes ab6285
 		e_data_book_view_notify_complete (book_view, GNOME_Evolution_Addressbook_Success);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	/* unref the */
Matthew Barnes ab6285
@@ -646,15 +633,12 @@
Matthew Barnes ab6285
 {
Matthew Barnes ab6285
 	FileBackendSearchClosure *closure = init_closure (book_view, E_BOOK_BACKEND_FILE (backend));
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (closure->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	d(printf ("starting book view thread\n"));
Matthew Barnes ab6285
 	closure->thread = g_thread_create (book_view_thread, book_view, TRUE, NULL);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_cond_wait (closure->cond, closure->mutex);
Matthew Barnes ab6285
+	e_flag_wait (closure->running);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	/* at this point we know the book view thread is actually running */
Matthew Barnes ab6285
-	g_mutex_unlock (closure->mutex);
Matthew Barnes ab6285
 	d(printf ("returning from start_book_view\n"));
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
@@ -663,14 +647,11 @@
Matthew Barnes ab6285
 				    EDataBookView *book_view)
Matthew Barnes ab6285
 {
Matthew Barnes ab6285
 	FileBackendSearchClosure *closure = get_closure (book_view);
Matthew Barnes ab6285
-	gboolean need_join = FALSE;
Matthew Barnes ab6285
+	gboolean need_join;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	d(printf ("stopping query\n"));
Matthew Barnes ab6285
-	g_mutex_lock (closure->mutex);
Matthew Barnes ab6285
-	if (!closure->stopped)
Matthew Barnes ab6285
-		need_join = TRUE;
Matthew Barnes ab6285
-	closure->stopped = TRUE;
Matthew Barnes ab6285
-	g_mutex_unlock (closure->mutex);
Matthew Barnes ab6285
+	need_join = e_flag_is_set (closure->running);
Matthew Barnes ab6285
+	e_flag_clear (closure->running);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	if (need_join)
Matthew Barnes ab6285
 		g_thread_join (closure->thread);
Matthew Barnes ab6285
--- evolution-data-server-1.9.92/addressbook/backends/groupwise/e-book-backend-groupwise.c.e-flag	2007-01-03 09:56:29.000000000 -0500
Matthew Barnes ab6285
+++ evolution-data-server-1.9.92/addressbook/backends/groupwise/e-book-backend-groupwise.c	2007-03-09 00:22:01.000000000 -0500
Matthew Barnes ab6285
@@ -40,6 +40,7 @@
Matthew Barnes ab6285
 #include "libedataserver/e-sexp.h"
Matthew Barnes ab6285
 #include "libedataserver/e-data-server-util.h"
Matthew Barnes ab6285
 #include "libedataserver/e-db3-utils.h"
Matthew Barnes ab6285
+#include "libedataserver/e-flag.h"
Matthew Barnes ab6285
 #include "libedataserver/e-url.h" 
Matthew Barnes ab6285
 #include "libebook/e-contact.h"
Matthew Barnes ab6285
 #include "libedata-book/e-book-backend-sexp.h"
Matthew Barnes ab6285
@@ -2070,17 +2071,14 @@
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
 typedef struct {
Matthew Barnes ab6285
 	EBookBackendGroupwise *bg;
Matthew Barnes ab6285
-	GMutex *mutex;
Matthew Barnes ab6285
-	GCond *cond;
Matthew Barnes ab6285
 	GThread *thread;
Matthew Barnes ab6285
-	gboolean stopped;
Matthew Barnes ab6285
+	EFlag *running;
Matthew Barnes ab6285
 } GroupwiseBackendSearchClosure;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
 closure_destroy (GroupwiseBackendSearchClosure *closure)
Matthew Barnes ab6285
 {
Matthew Barnes ab6285
-	g_mutex_free (closure->mutex);
Matthew Barnes ab6285
-	g_cond_free (closure->cond);
Matthew Barnes ab6285
+	e_flag_free (closure->running);
Matthew Barnes ab6285
 	g_free (closure);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
@@ -2090,10 +2088,8 @@
Matthew Barnes ab6285
 	GroupwiseBackendSearchClosure *closure = g_new (GroupwiseBackendSearchClosure, 1);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	closure->bg = bg;
Matthew Barnes ab6285
-	closure->mutex = g_mutex_new ();
Matthew Barnes ab6285
-	closure->cond = g_cond_new ();
Matthew Barnes ab6285
 	closure->thread = NULL;
Matthew Barnes ab6285
-	closure->stopped = FALSE;
Matthew Barnes ab6285
+	closure->running = e_flag_new ();
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	g_object_set_data_full (G_OBJECT (book_view), "EBookBackendGroupwise.BookView::closure",
Matthew Barnes ab6285
 				closure, (GDestroyNotify)closure_destroy);
Matthew Barnes ab6285
@@ -2115,19 +2111,14 @@
Matthew Barnes ab6285
 			 GroupwiseBackendSearchClosure *closure)
Matthew Barnes ab6285
 {
Matthew Barnes ab6285
 	int i;
Matthew Barnes ab6285
-	gboolean stopped = FALSE;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	if (enable_debug)
Matthew Barnes ab6285
 		printf ("\nread contacts from cache for the ids found in summary\n");
Matthew Barnes ab6285
 	for (i = 0; i < ids->len; i ++) {
Matthew Barnes ab6285
 		char *uid = g_ptr_array_index (ids, i);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-		g_mutex_lock (closure->mutex);
Matthew Barnes ab6285
-		stopped = closure->stopped;
Matthew Barnes ab6285
-		g_mutex_unlock (closure->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
-		if (stopped)
Matthew Barnes ab6285
-			break;	
Matthew Barnes ab6285
+		if (!e_flag_is_set (closure->running))
Matthew Barnes ab6285
+			break;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		EContact *contact = 
Matthew Barnes ab6285
 			e_book_backend_db_cache_get_contact (ebgw->priv->file_db, uid);
Matthew Barnes ab6285
@@ -2136,7 +2127,7 @@
Matthew Barnes ab6285
 			g_object_unref (contact);
Matthew Barnes ab6285
 		}
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
-	if (!stopped)
Matthew Barnes ab6285
+	if (e_flag_is_set (closure->running))
Matthew Barnes ab6285
 		e_data_book_view_notify_complete (book_view, 
Matthew Barnes ab6285
 						  GNOME_Evolution_Addressbook_Success);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
@@ -2151,7 +2142,6 @@
Matthew Barnes ab6285
 	const char *query = NULL;
Matthew Barnes ab6285
 	EGwFilter *filter = NULL;
Matthew Barnes ab6285
 	GPtrArray *ids = NULL;
Matthew Barnes ab6285
-	gboolean stopped = FALSE;
Matthew Barnes ab6285
 	EDataBookView *book_view = data;
Matthew Barnes ab6285
 	GroupwiseBackendSearchClosure *closure = get_closure (book_view);
Matthew Barnes ab6285
 	char *view = NULL;
Matthew Barnes ab6285
@@ -2166,9 +2156,7 @@
Matthew Barnes ab6285
 	if (enable_debug)
Matthew Barnes ab6285
 		printf ("start book view for %s \n", gwb->priv->book_name);
Matthew Barnes ab6285
        	bonobo_object_ref (book_view);
Matthew Barnes ab6285
-	g_mutex_lock (closure->mutex);
Matthew Barnes ab6285
-	g_cond_signal (closure->cond);
Matthew Barnes ab6285
-	g_mutex_unlock (closure->mutex);
Matthew Barnes ab6285
+	e_flag_set (closure->running);
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
 	query = e_data_book_view_get_card_query (book_view);
Matthew Barnes ab6285
 	if (enable_debug)
Matthew Barnes ab6285
@@ -2200,10 +2188,7 @@
Matthew Barnes ab6285
 		contacts = e_book_backend_db_cache_get_contacts (gwb->priv->file_db, query);
Matthew Barnes ab6285
 		temp_list = contacts;
Matthew Barnes ab6285
 		for (; contacts != NULL; contacts = g_list_next(contacts)) {
Matthew Barnes ab6285
-			g_mutex_lock (closure->mutex);
Matthew Barnes ab6285
-			stopped = closure->stopped;
Matthew Barnes ab6285
-			g_mutex_unlock (closure->mutex);
Matthew Barnes ab6285
-			if (stopped) {
Matthew Barnes ab6285
+			if (!e_flag_is_set (closure->running)) {
Matthew Barnes ab6285
 				for (;contacts != NULL; contacts = g_list_next (contacts))
Matthew Barnes ab6285
 					g_object_unref (contacts->data);
Matthew Barnes ab6285
 				break;
Matthew Barnes ab6285
@@ -2211,7 +2196,7 @@
Matthew Barnes ab6285
 			e_data_book_view_notify_update (book_view, E_CONTACT(contacts->data));
Matthew Barnes ab6285
 			g_object_unref (contacts->data);
Matthew Barnes ab6285
 		}
Matthew Barnes ab6285
-		if (!stopped)
Matthew Barnes ab6285
+		if (e_flag_is_set (closure->running))
Matthew Barnes ab6285
 			e_data_book_view_notify_complete (book_view, GNOME_Evolution_Addressbook_Success);
Matthew Barnes ab6285
 		if (temp_list)
Matthew Barnes ab6285
 			g_list_free (temp_list);
Matthew Barnes ab6285
@@ -2339,10 +2324,7 @@
Matthew Barnes ab6285
 		temp_list = gw_items;
Matthew Barnes ab6285
 		for (; gw_items != NULL; gw_items = g_list_next(gw_items)) { 
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-			g_mutex_lock (closure->mutex);
Matthew Barnes ab6285
-			stopped = closure->stopped;
Matthew Barnes ab6285
-			g_mutex_unlock (closure->mutex);
Matthew Barnes ab6285
-			if (stopped) {
Matthew Barnes ab6285
+			if (!e_flag_is_set (closure->running)) {
Matthew Barnes ab6285
 				for (;gw_items != NULL; gw_items = g_list_next (gw_items))
Matthew Barnes ab6285
 					g_object_unref (gw_items->data);
Matthew Barnes ab6285
 				break;
Matthew Barnes ab6285
@@ -2363,7 +2345,7 @@
Matthew Barnes ab6285
 		}
Matthew Barnes ab6285
 		if (temp_list)
Matthew Barnes ab6285
 			g_list_free (temp_list);
Matthew Barnes ab6285
-		if (!stopped)
Matthew Barnes ab6285
+		if (e_flag_is_set (closure->running))
Matthew Barnes ab6285
 			e_data_book_view_notify_complete (book_view, GNOME_Evolution_Addressbook_Success);
Matthew Barnes ab6285
 		if (filter)
Matthew Barnes ab6285
 			g_object_unref (filter);
Matthew Barnes ab6285
@@ -2392,12 +2374,10 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	if (enable_debug)
Matthew Barnes ab6285
 		printf ("\ne_book_backend_groupwise_start_book_view...\n");
Matthew Barnes ab6285
-	g_mutex_lock (closure->mutex);
Matthew Barnes ab6285
 	closure->thread = g_thread_create (book_view_thread, book_view, FALSE, NULL);
Matthew Barnes ab6285
-	g_cond_wait (closure->cond, closure->mutex);
Matthew Barnes ab6285
+	e_flag_wait (closure->running);
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
 	/* at this point we know the book view thread is actually running */
Matthew Barnes ab6285
-	g_mutex_unlock (closure->mutex);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
   
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
@@ -2408,10 +2388,7 @@
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
 	if (enable_debug)
Matthew Barnes ab6285
 		printf ("\ne_book_backend_groupwise_stop_book_view...\n");
Matthew Barnes ab6285
-	g_mutex_lock (closure->mutex);
Matthew Barnes ab6285
-	if (!closure->stopped)
Matthew Barnes ab6285
-		closure->stopped = TRUE;
Matthew Barnes ab6285
-	g_mutex_unlock (closure->mutex);
Matthew Barnes ab6285
+	e_flag_clear (closure->running);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
@@ -2650,11 +2627,8 @@
Matthew Barnes ab6285
 	if (book_view) {
Matthew Barnes ab6285
 		closure = get_closure (book_view);
Matthew Barnes ab6285
 		bonobo_object_ref (book_view);
Matthew Barnes ab6285
-		if (closure) {
Matthew Barnes ab6285
-			g_mutex_lock (closure->mutex);
Matthew Barnes ab6285
-			g_cond_signal (closure->cond);
Matthew Barnes ab6285
-			g_mutex_unlock (closure->mutex);
Matthew Barnes ab6285
-		}
Matthew Barnes ab6285
+		if (closure)
Matthew Barnes ab6285
+			e_flag_set (closure->running);
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	while (!done) {
Matthew Barnes ab6285
@@ -2799,11 +2773,8 @@
Matthew Barnes ab6285
 	if (book_view) {
Matthew Barnes ab6285
 		closure = get_closure (book_view);
Matthew Barnes ab6285
 		bonobo_object_ref (book_view);
Matthew Barnes ab6285
-		if (closure) {
Matthew Barnes ab6285
-			g_mutex_lock (closure->mutex);
Matthew Barnes ab6285
-			g_cond_signal (closure->cond);
Matthew Barnes ab6285
-			g_mutex_unlock (closure->mutex);
Matthew Barnes ab6285
-		}
Matthew Barnes ab6285
+		if (closure)
Matthew Barnes ab6285
+			e_flag_set (closure->running);
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	cache_file_name = e_book_backend_db_cache_get_filename(ebgw->priv->file_db);
Matthew Barnes ab6285
@@ -2967,11 +2938,8 @@
Matthew Barnes ab6285
 	if (book_view) {
Matthew Barnes ab6285
 		closure = get_closure (book_view);
Matthew Barnes ab6285
 		bonobo_object_ref (book_view);
Matthew Barnes ab6285
-		if (closure){
Matthew Barnes ab6285
-			g_mutex_lock (closure->mutex);
Matthew Barnes ab6285
-			g_cond_signal (closure->cond);
Matthew Barnes ab6285
-			g_mutex_unlock (closure->mutex);
Matthew Barnes ab6285
-		}
Matthew Barnes ab6285
+		if (closure)
Matthew Barnes ab6285
+			e_flag_set (closure->running);
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	/* update the cache */
Matthew Barnes ab6285
--- evolution-data-server-1.9.92/addressbook/backends/vcf/e-book-backend-vcf.c.e-flag	2007-01-03 09:56:29.000000000 -0500
Matthew Barnes ab6285
+++ evolution-data-server-1.9.92/addressbook/backends/vcf/e-book-backend-vcf.c	2007-03-09 00:22:01.000000000 -0500
Matthew Barnes ab6285
@@ -41,6 +41,7 @@
Matthew Barnes ab6285
 #include <glib/gi18n-lib.h>
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 #include "libedataserver/e-data-server-util.h"
Matthew Barnes ab6285
+#include "libedataserver/e-flag.h"
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 #include "libebook/e-contact.h"
Matthew Barnes ab6285
  
Matthew Barnes ab6285
@@ -427,18 +428,15 @@
Matthew Barnes ab6285
 typedef struct {
Matthew Barnes ab6285
 	EBookBackendVCF *bvcf;
Matthew Barnes ab6285
 	EDataBookView *view;
Matthew Barnes ab6285
-	GMutex *mutex;
Matthew Barnes ab6285
-	GCond *cond;
Matthew Barnes ab6285
 	GThread *thread;
Matthew Barnes ab6285
-	gboolean stopped;
Matthew Barnes ab6285
+	EFlag *running;
Matthew Barnes ab6285
 } VCFBackendSearchClosure;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
 closure_destroy (VCFBackendSearchClosure *closure)
Matthew Barnes ab6285
 {
Matthew Barnes ab6285
 	d(printf ("destroying search closure\n"));
Matthew Barnes ab6285
-	g_mutex_free (closure->mutex);
Matthew Barnes ab6285
-	g_cond_free (closure->cond);
Matthew Barnes ab6285
+	e_flag_free (closure->running);
Matthew Barnes ab6285
 	g_free (closure);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
@@ -449,10 +447,8 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	closure->bvcf = bvcf;
Matthew Barnes ab6285
 	closure->view = book_view;
Matthew Barnes ab6285
-	closure->mutex = g_mutex_new ();
Matthew Barnes ab6285
-	closure->cond = g_cond_new ();
Matthew Barnes ab6285
 	closure->thread = NULL;
Matthew Barnes ab6285
-	closure->stopped = FALSE;
Matthew Barnes ab6285
+	closure->running = e_flag_new ();
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	g_object_set_data_full (G_OBJECT (book_view), "EBookBackendVCF.BookView::closure",
Matthew Barnes ab6285
 				closure, (GDestroyNotify)closure_destroy);
Matthew Barnes ab6285
@@ -486,9 +482,7 @@
Matthew Barnes ab6285
 		e_data_book_view_notify_status_message (book_view, _("Searching..."));
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	d(printf ("signalling parent thread\n"));
Matthew Barnes ab6285
-	g_mutex_lock (closure->mutex);
Matthew Barnes ab6285
-	g_cond_signal (closure->cond);
Matthew Barnes ab6285
-	g_mutex_unlock (closure->mutex);
Matthew Barnes ab6285
+	e_flag_set (closure->running);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	for (l = closure->bvcf->priv->contact_list; l; l = l->next) {
Matthew Barnes ab6285
 		char *vcard_string = l->data;
Matthew Barnes ab6285
@@ -496,11 +490,11 @@
Matthew Barnes ab6285
 		e_data_book_view_notify_update (closure->view, contact);
Matthew Barnes ab6285
 		g_object_unref (contact);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-		if (closure->stopped)
Matthew Barnes ab6285
+		if (!e_flag_is_set (closure->running))
Matthew Barnes ab6285
 			break;
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	if (!closure->stopped)
Matthew Barnes ab6285
+	if (e_flag_is_set (closure->running))
Matthew Barnes ab6285
 		e_data_book_view_notify_complete (closure->view, GNOME_Evolution_Addressbook_Success);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	/* unref the book view */
Matthew Barnes ab6285
@@ -518,15 +512,12 @@
Matthew Barnes ab6285
 {
Matthew Barnes ab6285
 	VCFBackendSearchClosure *closure = init_closure (book_view, E_BOOK_BACKEND_VCF (backend));
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (closure->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	d(printf ("starting book view thread\n"));
Matthew Barnes ab6285
 	closure->thread = g_thread_create (book_view_thread, book_view, TRUE, NULL);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_cond_wait (closure->cond, closure->mutex);
Matthew Barnes ab6285
+	e_flag_wait (closure->running);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	/* at this point we know the book view thread is actually running */
Matthew Barnes ab6285
-	g_mutex_unlock (closure->mutex);
Matthew Barnes ab6285
 	d(printf ("returning from start_book_view\n"));
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
@@ -536,14 +527,11 @@
Matthew Barnes ab6285
 				   EDataBookView *book_view)
Matthew Barnes ab6285
 {
Matthew Barnes ab6285
 	VCFBackendSearchClosure *closure = get_closure (book_view);
Matthew Barnes ab6285
-	gboolean need_join = FALSE;
Matthew Barnes ab6285
+	gboolean need_join;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	d(printf ("stopping query\n"));
Matthew Barnes ab6285
-	g_mutex_lock (closure->mutex);
Matthew Barnes ab6285
-	if (!closure->stopped)
Matthew Barnes ab6285
-		need_join = TRUE;
Matthew Barnes ab6285
-	closure->stopped = TRUE;
Matthew Barnes ab6285
-	g_mutex_unlock (closure->mutex);
Matthew Barnes ab6285
+	need_join = e_flag_is_set (closure->running);
Matthew Barnes ab6285
+	e_flag_clear (closure->running);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	if (need_join)
Matthew Barnes ab6285
 		g_thread_join (closure->thread);
Matthew Barnes ab6285
--- evolution-data-server-1.9.92/docs/reference/libedataserver/libedataserver-docs.sgml.e-flag	2007-01-03 09:56:22.000000000 -0500
Matthew Barnes ab6285
+++ evolution-data-server-1.9.92/docs/reference/libedataserver/libedataserver-docs.sgml	2007-03-08 17:16:18.000000000 -0500
Matthew Barnes ab6285
@@ -16,6 +16,7 @@
Matthew Barnes ab6285
     <xi:include href="xml/e-db3-utils.xml"/>
Matthew Barnes ab6285
     <xi:include href="xml/e-dbhash.xml"/>
Matthew Barnes ab6285
     <xi:include href="xml/e-file-cache.xml"/>
Matthew Barnes ab6285
+    <xi:include href="xml/e-flag.xml"/>
Matthew Barnes ab6285
     <xi:include href="xml/e-iconv.xml"/>
Matthew Barnes ab6285
     <xi:include href="xml/e-iterator.xml"/>
Matthew Barnes ab6285
     <xi:include href="xml/e-list-iterator.xml"/>
Matthew Barnes ab6285
--- /dev/null	2007-03-08 09:20:11.212292094 -0500
Matthew Barnes ab6285
+++ evolution-data-server-1.9.92/docs/reference/libedataserver/tmpl/e-flag.sgml	2007-03-08 17:16:18.000000000 -0500
Matthew Barnes ab6285
@@ -0,0 +1,89 @@
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+EFlag
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+Simple thread synchronization
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+<para>
Matthew Barnes ab6285
+An #EFlag is a simple thread synchronization mechanism. It implements a
Matthew Barnes ab6285
+thread-safe flag that can be blocked on.
Matthew Barnes ab6285
+</para>
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+<para>
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+</para>
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+<para>
Matthew Barnes ab6285
+The <structname>EFlag</structname> struct is an opaque data structure
Matthew Barnes ab6285
+representing a thread-safe flag.  It should be accessed only by using
Matthew Barnes ab6285
+the following functions.
Matthew Barnes ab6285
+</para>
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+<para>
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+</para>
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+@Returns: 
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+<para>
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+</para>
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+@flag: 
Matthew Barnes ab6285
+@Returns: 
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+<para>
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+</para>
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+@flag: 
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+<para>
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+</para>
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+@flag: 
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+<para>
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+</para>
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+@flag: 
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+<para>
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+</para>
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+@flag: 
Matthew Barnes ab6285
+@abs_time: 
Matthew Barnes ab6285
+@Returns: 
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+<para>
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+</para>
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+@flag: 
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+
Matthew Barnes ab6285
--- evolution-data-server-1.9.92/docs/reference/libedataserver/libedataserver-sections.txt.e-flag	2007-01-03 09:56:22.000000000 -0500
Matthew Barnes ab6285
+++ evolution-data-server-1.9.92/docs/reference/libedataserver/libedataserver-sections.txt	2007-03-08 17:16:18.000000000 -0500
Matthew Barnes ab6285
@@ -83,6 +83,19 @@
Matthew Barnes ab6285
 </SECTION>
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 <SECTION>
Matthew Barnes ab6285
+<FILE>e-flag</FILE>
Matthew Barnes ab6285
+<TITLE>EFlag</TITLE>
Matthew Barnes ab6285
+EFlag
Matthew Barnes ab6285
+e_flag_new
Matthew Barnes ab6285
+e_flag_is_set
Matthew Barnes ab6285
+e_flag_set
Matthew Barnes ab6285
+e_flag_clear
Matthew Barnes ab6285
+e_flag_wait
Matthew Barnes ab6285
+e_flag_timed_wait
Matthew Barnes ab6285
+e_flag_free
Matthew Barnes ab6285
+</SECTION>
Matthew Barnes ab6285
+
Matthew Barnes ab6285
+<SECTION>
Matthew Barnes ab6285
 <FILE>e-iterator</FILE>
Matthew Barnes ab6285
 <TITLE>EIterator</TITLE>
Matthew Barnes ab6285
 e_iterator_get
Matthew Barnes ab6285
--- evolution-data-server-1.9.92/calendar/libecal/e-cal.c.e-flag	2007-03-08 17:16:18.000000000 -0500
Matthew Barnes ab6285
+++ evolution-data-server-1.9.92/calendar/libecal/e-cal.c	2007-03-09 00:22:01.000000000 -0500
Matthew Barnes ab6285
@@ -33,6 +33,7 @@
Matthew Barnes ab6285
 #include <bonobo/bonobo-main.h>
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 #include <libedataserver/e-component-listener.h>
Matthew Barnes ab6285
+#include <libedataserver/e-flag.h>
Matthew Barnes ab6285
 #include <libedataserver/e-url.h>
Matthew Barnes ab6285
 #include "e-cal-marshal.h"
Matthew Barnes ab6285
 #include "e-cal-time-util.h"
Matthew Barnes ab6285
@@ -49,8 +50,7 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 typedef struct {
Matthew Barnes ab6285
-	GMutex *mutex;
Matthew Barnes ab6285
-	GCond *cond;
Matthew Barnes ab6285
+	EFlag *done;
Matthew Barnes ab6285
 	ECalendarStatus status;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	char *uid;
Matthew Barnes ab6285
@@ -306,8 +306,7 @@
Matthew Barnes ab6285
 {
Matthew Barnes ab6285
 	ECalendarOp *op = g_new0 (ECalendarOp, 1);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	op->mutex = g_mutex_new ();
Matthew Barnes ab6285
-	op->cond = g_cond_new ();
Matthew Barnes ab6285
+	op->done = e_flag_new ();
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	ecal->priv->current_op = op;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
@@ -329,8 +328,7 @@
Matthew Barnes ab6285
 e_calendar_free_op (ECalendarOp *op)
Matthew Barnes ab6285
 {
Matthew Barnes ab6285
 	/* XXX more stuff here */
Matthew Barnes ab6285
-	g_cond_free (op->cond);
Matthew Barnes ab6285
-	g_mutex_free (op->mutex);
Matthew Barnes ab6285
+	e_flag_free (op->done);
Matthew Barnes ab6285
 	g_free (op);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
@@ -448,14 +446,10 @@
Matthew Barnes ab6285
 		return;
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	op->status = status;
Matthew Barnes ab6285
 	op->bool = read_only;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_cond_signal (op->cond);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
-	g_mutex_unlock (op->mutex);
Matthew Barnes ab6285
+	e_flag_set (op->done);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
@@ -477,14 +471,10 @@
Matthew Barnes ab6285
 		return;
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	op->status = status;
Matthew Barnes ab6285
 	op->string = g_strdup (address);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_cond_signal (op->cond);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
-	g_mutex_unlock (op->mutex);
Matthew Barnes ab6285
+	e_flag_set (op->done);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
@@ -500,14 +490,10 @@
Matthew Barnes ab6285
 		return;
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	op->status = status;
Matthew Barnes ab6285
 	op->string = g_strdup (address);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_cond_signal (op->cond);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
-	g_mutex_unlock (op->mutex);
Matthew Barnes ab6285
+	e_flag_set (op->done);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
@@ -523,14 +509,10 @@
Matthew Barnes ab6285
 		return;
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	op->status = status;
Matthew Barnes ab6285
 	op->string = g_strdup (attribute);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_cond_signal (op->cond);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
-	g_mutex_unlock (op->mutex);
Matthew Barnes ab6285
+	e_flag_set (op->done);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
@@ -546,14 +528,10 @@
Matthew Barnes ab6285
 		return;
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	op->status = status;
Matthew Barnes ab6285
 	op->string = g_strdup (capabilities);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_cond_signal (op->cond);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
-	g_mutex_unlock (op->mutex);
Matthew Barnes ab6285
+	e_flag_set (op->done);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
@@ -569,13 +547,9 @@
Matthew Barnes ab6285
 		return;
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	op->status = status;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_cond_signal (op->cond);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
-	g_mutex_unlock (op->mutex);
Matthew Barnes ab6285
+	e_flag_set (op->done);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
@@ -591,13 +565,9 @@
Matthew Barnes ab6285
 		return;
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	op->status = status;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_cond_signal (op->cond);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
-	g_mutex_unlock (op->mutex);
Matthew Barnes ab6285
+	e_flag_set (op->done);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
@@ -613,14 +583,10 @@
Matthew Barnes ab6285
 		return;
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	op->status = status;
Matthew Barnes ab6285
 	op->uid = g_strdup (uid);
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
-	g_cond_signal (op->cond);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
-	g_mutex_unlock (op->mutex);
Matthew Barnes ab6285
+	e_flag_set (op->done);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
@@ -636,13 +602,9 @@
Matthew Barnes ab6285
 		return;
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	op->status = status;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_cond_signal (op->cond);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
-	g_mutex_unlock (op->mutex);
Matthew Barnes ab6285
+	e_flag_set (op->done);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
@@ -658,13 +620,9 @@
Matthew Barnes ab6285
 		return;
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	op->status = status;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_cond_signal (op->cond);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
-	g_mutex_unlock (op->mutex);
Matthew Barnes ab6285
+	e_flag_set (op->done);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
@@ -680,13 +638,9 @@
Matthew Barnes ab6285
 		return;
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	op->status = status;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_cond_signal (op->cond);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
-	g_mutex_unlock (op->mutex);
Matthew Barnes ab6285
+	e_flag_set (op->done);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
@@ -702,13 +656,9 @@
Matthew Barnes ab6285
 		return;
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	op->status = status;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_cond_signal (op->cond);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
-	g_mutex_unlock (op->mutex);
Matthew Barnes ab6285
+	e_flag_set (op->done);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
@@ -725,8 +675,6 @@
Matthew Barnes ab6285
 		return;
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	op->status = status;
Matthew Barnes ab6285
 	op->list = g_list_copy (users);
Matthew Barnes ab6285
 	op->string = g_strdup (object);
Matthew Barnes ab6285
@@ -734,9 +682,7 @@
Matthew Barnes ab6285
 	for (l = op->list; l; l = l->next)
Matthew Barnes ab6285
 		l->data = g_strdup (l->data);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_cond_signal (op->cond);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
-	g_mutex_unlock (op->mutex);
Matthew Barnes ab6285
+	e_flag_set (op->done);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
@@ -752,14 +698,10 @@
Matthew Barnes ab6285
 		return;
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	op->status = status;
Matthew Barnes ab6285
 	op->string = g_strdup (object);
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
-	g_cond_signal (op->cond);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
-	g_mutex_unlock (op->mutex);
Matthew Barnes ab6285
+	e_flag_set (op->done);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
@@ -775,14 +717,10 @@
Matthew Barnes ab6285
 		return;
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	op->status = status;
Matthew Barnes ab6285
 	op->string = g_strdup (object);
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
-	g_cond_signal (op->cond);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
-	g_mutex_unlock (op->mutex);
Matthew Barnes ab6285
+	e_flag_set (op->done);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
@@ -799,17 +737,13 @@
Matthew Barnes ab6285
 		return;
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	op->status = status;
Matthew Barnes ab6285
 	op->list = g_list_copy (objects);
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
 	for (l = op->list; l; l = l->next)
Matthew Barnes ab6285
 		l->data = icalcomponent_new_clone (l->data);
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
-	g_cond_signal (op->cond);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
-	g_mutex_unlock (op->mutex);
Matthew Barnes ab6285
+	e_flag_set (op->done);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
@@ -825,14 +759,10 @@
Matthew Barnes ab6285
 		return;
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	op->status = status;
Matthew Barnes ab6285
 	op->slist = g_slist_copy (attachments);
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
-	g_cond_signal (op->cond);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
-	g_mutex_unlock (op->mutex);
Matthew Barnes ab6285
+	e_flag_set (op->done);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
@@ -848,15 +778,10 @@
Matthew Barnes ab6285
 		return;
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	op->status = status;
Matthew Barnes ab6285
 	op->string = g_strdup (object);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_cond_signal (op->cond);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
-	g_mutex_unlock (op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
+	e_flag_set (op->done);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
@@ -872,15 +797,10 @@
Matthew Barnes ab6285
 		return;
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	op->status = status;
Matthew Barnes ab6285
 	op->uid = g_strdup (tzid);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_cond_signal (op->cond);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
-	g_mutex_unlock (op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
+	e_flag_set (op->done);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
@@ -896,13 +816,9 @@
Matthew Barnes ab6285
 		return;
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	op->status = status;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_cond_signal (op->cond);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
-	g_mutex_unlock (op->mutex);
Matthew Barnes ab6285
+	e_flag_set (op->done);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
@@ -919,8 +835,6 @@
Matthew Barnes ab6285
 		return;
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	op->status = status;
Matthew Barnes ab6285
 	op->list = g_list_copy (changes);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
@@ -934,9 +848,7 @@
Matthew Barnes ab6285
 		l->data = new_ccc;
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
-	g_cond_signal (op->cond);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
-	g_mutex_unlock (op->mutex);
Matthew Barnes ab6285
+	e_flag_set (op->done);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
@@ -953,17 +865,13 @@
Matthew Barnes ab6285
 		return;
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	op->status = status;
Matthew Barnes ab6285
 	op->list = g_list_copy (freebusy);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	for (l = op->list; l; l = l->next)
Matthew Barnes ab6285
 		l->data = e_cal_component_clone (l->data);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_cond_signal (op->cond);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
-	g_mutex_unlock (op->mutex);
Matthew Barnes ab6285
+	e_flag_set (op->done);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static void
Matthew Barnes ab6285
@@ -979,14 +887,10 @@
Matthew Barnes ab6285
 		return;
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	op->status = status;
Matthew Barnes ab6285
 	op->query = e_cal_view_new (query, op->listener, ecal);
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
-	g_cond_signal (op->cond);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
-	g_mutex_unlock (op->mutex);	
Matthew Barnes ab6285
+	e_flag_set (op->done);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 static gboolean  
Matthew Barnes ab6285
@@ -1722,7 +1626,6 @@
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 	/* start the open operation */
Matthew Barnes ab6285
 	our_op = e_calendar_new_op (ecal);
Matthew Barnes ab6285
-	g_mutex_lock (our_op->mutex);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	g_mutex_unlock (priv->mutex);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
@@ -1735,7 +1638,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		if (priv->auth_func == NULL) {
Matthew Barnes ab6285
 			e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-			g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 			e_calendar_free_op (our_op);
Matthew Barnes ab6285
 			priv->load_state = E_CAL_LOAD_NOT_LOADED;
Matthew Barnes ab6285
 			*status = E_CALENDAR_STATUS_AUTHENTICATION_REQUIRED;
Matthew Barnes ab6285
@@ -1745,7 +1647,6 @@
Matthew Barnes ab6285
 		username = e_source_get_property (priv->source, "username");
Matthew Barnes ab6285
 		if (!username) {
Matthew Barnes ab6285
 			e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-			g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 			e_calendar_free_op (our_op);
Matthew Barnes ab6285
 			priv->load_state = E_CAL_LOAD_NOT_LOADED;
Matthew Barnes ab6285
 			*status = E_CALENDAR_STATUS_AUTHENTICATION_REQUIRED;
Matthew Barnes ab6285
@@ -1773,7 +1674,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		if (!key) {
Matthew Barnes ab6285
 			e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-			g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 			e_calendar_free_op (our_op);
Matthew Barnes ab6285
 			priv->load_state = E_CAL_LOAD_NOT_LOADED;
Matthew Barnes ab6285
 			*status = E_CALENDAR_STATUS_URI_NOT_LOADED;
Matthew Barnes ab6285
@@ -1784,7 +1684,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		if (!password) {
Matthew Barnes ab6285
 			e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-			g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 			e_calendar_free_op (our_op);
Matthew Barnes ab6285
 			priv->load_state = E_CAL_LOAD_NOT_LOADED;
Matthew Barnes ab6285
 			*status = E_CALENDAR_STATUS_AUTHENTICATION_REQUIRED; 
Matthew Barnes ab6285
@@ -1809,7 +1708,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	if (BONOBO_EX (&ev)) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 		
Matthew Barnes ab6285
 		CORBA_exception_free (&ev;;
Matthew Barnes ab6285
@@ -1823,14 +1721,11 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_free (&ev;;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	/* wait for something to happen (both cancellation and a
Matthew Barnes ab6285
-	   successful response will notity us via our cv */
Matthew Barnes ab6285
-	g_cond_wait (our_op->cond, our_op->mutex);
Matthew Barnes ab6285
+	e_flag_wait (our_op->done);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	*status = our_op->status;
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
 	e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-	g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 	e_calendar_free_op (our_op);
Matthew Barnes ab6285
 	if (*status == E_CALENDAR_STATUS_OK) {
Matthew Barnes ab6285
 		priv->load_state = E_CAL_LOAD_LOADED;
Matthew Barnes ab6285
@@ -1986,8 +1881,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	our_op = e_calendar_new_op (ecal);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (our_op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	g_mutex_unlock (ecal->priv->mutex);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 
Matthew Barnes ab6285
@@ -1996,7 +1889,6 @@
Matthew Barnes ab6285
 	GNOME_Evolution_Calendar_Cal_remove (priv->cal, &ev;;
Matthew Barnes ab6285
 	if (BONOBO_EX (&ev)) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		CORBA_exception_free (&ev;;
Matthew Barnes ab6285
@@ -2008,14 +1900,11 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_free (&ev;;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	/* wait for something to happen (both cancellation and a
Matthew Barnes ab6285
-	   successful response will notity us via our cv */
Matthew Barnes ab6285
-	g_cond_wait (our_op->cond, our_op->mutex);
Matthew Barnes ab6285
+	e_flag_wait (our_op->done);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	status = our_op->status;
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
 	e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-	g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 	e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	E_CALENDAR_CHECK_STATUS (status, error);
Matthew Barnes ab6285
@@ -2247,8 +2136,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	our_op = e_calendar_new_op (ecal);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (our_op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	/* set it to true so that op does not emit cond signals for all notifications
Matthew Barnes ab6285
 	   from the backend */
Matthew Barnes ab6285
 	our_op->bool = TRUE;
Matthew Barnes ab6285
@@ -2261,7 +2148,6 @@
Matthew Barnes ab6285
 	GNOME_Evolution_Calendar_Cal_isReadOnly (priv->cal, &ev;;
Matthew Barnes ab6285
 	if (BONOBO_EX (&ev)) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		CORBA_exception_free (&ev;;
Matthew Barnes ab6285
@@ -2273,9 +2159,7 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_free (&ev;;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	/* wait for something to happen (both cancellation and a
Matthew Barnes ab6285
-	   successful response will notity us via our cv */
Matthew Barnes ab6285
-	g_cond_wait (our_op->cond, our_op->mutex);
Matthew Barnes ab6285
+	e_flag_wait (our_op->done);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	status = our_op->status;
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
@@ -2283,7 +2167,6 @@
Matthew Barnes ab6285
 		*read_only = our_op->bool;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-	g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 	e_calendar_free_op (our_op);
Matthew Barnes ab6285
 	E_CALENDAR_CHECK_STATUS (status, error);
Matthew Barnes ab6285
 }
Matthew Barnes ab6285
@@ -2326,8 +2209,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		our_op = e_calendar_new_op (ecal);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-		g_mutex_lock (our_op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 		g_mutex_unlock (ecal->priv->mutex);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 
Matthew Barnes ab6285
@@ -2336,7 +2217,6 @@
Matthew Barnes ab6285
 		GNOME_Evolution_Calendar_Cal_getCalAddress (priv->cal, &ev;;
Matthew Barnes ab6285
 		if (BONOBO_EX (&ev)) {
Matthew Barnes ab6285
 			e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-			g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 			e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 			CORBA_exception_free (&ev;;
Matthew Barnes ab6285
@@ -2348,14 +2228,11 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		CORBA_exception_free (&ev;;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-		/* wait for something to happen (both cancellation and a
Matthew Barnes ab6285
-		   successful response will notity us via our cv */
Matthew Barnes ab6285
-		g_cond_wait (our_op->cond, our_op->mutex);
Matthew Barnes ab6285
+		e_flag_wait (our_op->done);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		status = our_op->status;
Matthew Barnes ab6285
 		*cal_address = our_op->string;
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		E_CALENDAR_CHECK_STATUS (status, error);
Matthew Barnes ab6285
@@ -2403,8 +2280,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	our_op = e_calendar_new_op (ecal);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (our_op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	g_mutex_unlock (ecal->priv->mutex);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 
Matthew Barnes ab6285
@@ -2413,7 +2288,6 @@
Matthew Barnes ab6285
 	GNOME_Evolution_Calendar_Cal_getAlarmEmailAddress (priv->cal, &ev;;
Matthew Barnes ab6285
 	if (BONOBO_EX (&ev)) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		CORBA_exception_free (&ev;;
Matthew Barnes ab6285
@@ -2425,15 +2299,12 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_free (&ev;;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	/* wait for something to happen (both cancellation and a
Matthew Barnes ab6285
-	   successful response will notity us via our cv */
Matthew Barnes ab6285
-	g_cond_wait (our_op->cond, our_op->mutex);
Matthew Barnes ab6285
+	e_flag_wait (our_op->done);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	status = our_op->status;
Matthew Barnes ab6285
 	*alarm_address = our_op->string;
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
 	e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-	g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 	e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	E_CALENDAR_CHECK_STATUS (status, error);
Matthew Barnes ab6285
@@ -2476,8 +2347,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	our_op = e_calendar_new_op (ecal);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (our_op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	g_mutex_unlock (ecal->priv->mutex);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 
Matthew Barnes ab6285
@@ -2486,7 +2355,6 @@
Matthew Barnes ab6285
 	GNOME_Evolution_Calendar_Cal_getLdapAttribute (priv->cal, &ev;;
Matthew Barnes ab6285
 	if (BONOBO_EX (&ev)) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		CORBA_exception_free (&ev;;
Matthew Barnes ab6285
@@ -2498,15 +2366,12 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_free (&ev;;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	/* wait for something to happen (both cancellation and a
Matthew Barnes ab6285
-	   successful response will notity us via our cv */
Matthew Barnes ab6285
-	g_cond_wait (our_op->cond, our_op->mutex);
Matthew Barnes ab6285
+	e_flag_wait (our_op->done);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	status = our_op->status;
Matthew Barnes ab6285
 	*ldap_attribute = our_op->string;
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
 	e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-	g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 	e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	E_CALENDAR_CHECK_STATUS (status, error);
Matthew Barnes ab6285
@@ -2539,8 +2404,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	our_op = e_calendar_new_op (ecal);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (our_op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	g_mutex_unlock (ecal->priv->mutex);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 
Matthew Barnes ab6285
@@ -2549,7 +2412,6 @@
Matthew Barnes ab6285
 	GNOME_Evolution_Calendar_Cal_getStaticCapabilities (priv->cal, &ev;;
Matthew Barnes ab6285
 	if (BONOBO_EX (&ev)) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		CORBA_exception_free (&ev;;
Matthew Barnes ab6285
@@ -2561,15 +2423,12 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_free (&ev;;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	/* wait for something to happen (both cancellation and a
Matthew Barnes ab6285
-	   successful response will notity us via our cv */
Matthew Barnes ab6285
-	g_cond_wait (our_op->cond, our_op->mutex);
Matthew Barnes ab6285
+	e_flag_wait (our_op->done);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	status = our_op->status;
Matthew Barnes ab6285
 	priv->capabilities = our_op->string;
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
 	e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-	g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 	e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	E_CALENDAR_CHECK_STATUS (status, error);
Matthew Barnes ab6285
@@ -2778,8 +2637,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	our_op = e_calendar_new_op (ecal);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (our_op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	g_mutex_unlock (ecal->priv->mutex);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_init (&ev;;
Matthew Barnes ab6285
@@ -2787,7 +2644,6 @@
Matthew Barnes ab6285
 	GNOME_Evolution_Calendar_Cal_getDefaultObject (priv->cal, &ev;;
Matthew Barnes ab6285
 	if (BONOBO_EX (&ev)) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		CORBA_exception_free (&ev;;
Matthew Barnes ab6285
@@ -2799,9 +2655,7 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_free (&ev;;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	/* wait for something to happen (both cancellation and a
Matthew Barnes ab6285
-	   successful response will notity us via our cv */
Matthew Barnes ab6285
-	g_cond_wait (our_op->cond, our_op->mutex);
Matthew Barnes ab6285
+	e_flag_wait (our_op->done);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	status = our_op->status;
Matthew Barnes ab6285
         if (status != E_CALENDAR_STATUS_OK) {
Matthew Barnes ab6285
@@ -2814,7 +2668,6 @@
Matthew Barnes ab6285
 	g_free (our_op->string);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-	g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 	e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	E_CALENDAR_CHECK_STATUS (status, error);
Matthew Barnes ab6285
@@ -2859,15 +2712,12 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	our_op = e_calendar_new_op (ecal);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (our_op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	g_mutex_unlock (ecal->priv->mutex);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_init (&ev;;
Matthew Barnes ab6285
 	GNOME_Evolution_Calendar_Cal_getAttachmentList (priv->cal, uid, rid ? rid : "", &ev;;
Matthew Barnes ab6285
 	if (BONOBO_EX (&ev)) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		CORBA_exception_free (&ev;;
Matthew Barnes ab6285
@@ -2879,9 +2729,7 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_free (&ev;;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	/* wait for something to happen (both cancellation and a
Matthew Barnes ab6285
-	   successful response will notity us via our cv */
Matthew Barnes ab6285
-	g_cond_wait (our_op->cond, our_op->mutex);
Matthew Barnes ab6285
+	e_flag_wait (our_op->done);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	status = our_op->status;
Matthew Barnes ab6285
         if (status != E_CALENDAR_STATUS_OK){ 
Matthew Barnes ab6285
@@ -2891,7 +2739,6 @@
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-	g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 	e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	E_CALENDAR_CHECK_STATUS (status, error);
Matthew Barnes ab6285
@@ -2936,8 +2783,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	our_op = e_calendar_new_op (ecal);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (our_op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	g_mutex_unlock (ecal->priv->mutex);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_init (&ev;;
Matthew Barnes ab6285
@@ -2945,7 +2790,6 @@
Matthew Barnes ab6285
 	GNOME_Evolution_Calendar_Cal_getObject (priv->cal, uid, rid ? rid : "", &ev;;
Matthew Barnes ab6285
 	if (BONOBO_EX (&ev)) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		CORBA_exception_free (&ev;;
Matthew Barnes ab6285
@@ -2957,9 +2801,7 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_free (&ev;;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	/* wait for something to happen (both cancellation and a
Matthew Barnes ab6285
-	   successful response will notity us via our cv */
Matthew Barnes ab6285
-	g_cond_wait (our_op->cond, our_op->mutex);
Matthew Barnes ab6285
+	e_flag_wait (our_op->done);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	status = our_op->status;
Matthew Barnes ab6285
         if (status != E_CALENDAR_STATUS_OK){ 
Matthew Barnes ab6285
@@ -3007,7 +2849,6 @@
Matthew Barnes ab6285
 	g_free (our_op->string);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-	g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 	e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	E_CALENDAR_CHECK_STATUS (status, error);
Matthew Barnes ab6285
@@ -3053,8 +2894,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	our_op = e_calendar_new_op (ecal);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (our_op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	g_mutex_unlock (ecal->priv->mutex);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_init (&ev;;
Matthew Barnes ab6285
@@ -3062,7 +2901,6 @@
Matthew Barnes ab6285
 	GNOME_Evolution_Calendar_Cal_getObject (priv->cal, uid, "", &ev;;
Matthew Barnes ab6285
 	if (BONOBO_EX (&ev)) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		CORBA_exception_free (&ev;;
Matthew Barnes ab6285
@@ -3074,9 +2912,7 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_free (&ev;;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	/* wait for something to happen (both cancellation and a
Matthew Barnes ab6285
-	   successful response will notity us via our cv */
Matthew Barnes ab6285
-	g_cond_wait (our_op->cond, our_op->mutex);
Matthew Barnes ab6285
+	e_flag_wait (our_op->done);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	status = our_op->status;
Matthew Barnes ab6285
         if (status != E_CALENDAR_STATUS_OK){ 
Matthew Barnes ab6285
@@ -3134,7 +2970,6 @@
Matthew Barnes ab6285
 	g_free (our_op->string);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-	g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 	e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	E_CALENDAR_CHECK_STATUS (status, error);
Matthew Barnes ab6285
@@ -3204,8 +3039,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	our_op = e_calendar_new_op (ecal);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (our_op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	g_mutex_unlock (ecal->priv->mutex);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_init (&ev;;
Matthew Barnes ab6285
@@ -3214,7 +3047,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	if (BONOBO_EX (&ev)) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		CORBA_exception_free (&ev;;
Matthew Barnes ab6285
@@ -3226,15 +3058,12 @@
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
 	CORBA_exception_free (&ev;;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	/* wait for something to happen (both cancellation and a
Matthew Barnes ab6285
-	   successful response will notity us via our cv */
Matthew Barnes ab6285
-	g_cond_wait (our_op->cond, our_op->mutex);
Matthew Barnes ab6285
+	e_flag_wait (our_op->done);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	status = our_op->status;
Matthew Barnes ab6285
 	*changes = our_op->list;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-	g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 	e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	E_CALENDAR_CHECK_STATUS (status, error);
Matthew Barnes ab6285
@@ -3304,8 +3133,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	our_op = e_calendar_new_op (ecal);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (our_op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	g_mutex_unlock (ecal->priv->mutex);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_init (&ev;;
Matthew Barnes ab6285
@@ -3314,7 +3141,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	if (BONOBO_EX (&ev)) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		CORBA_exception_free (&ev;;
Matthew Barnes ab6285
@@ -3326,15 +3152,12 @@
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
 	CORBA_exception_free (&ev;;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	/* wait for something to happen (both cancellation and a
Matthew Barnes ab6285
-	   successful response will notity us via our cv */
Matthew Barnes ab6285
-	g_cond_wait (our_op->cond, our_op->mutex);
Matthew Barnes ab6285
+	e_flag_wait (our_op->done);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	status = our_op->status;
Matthew Barnes ab6285
 	*objects = our_op->list;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-	g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 	e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	E_CALENDAR_CHECK_STATUS (status, error);
Matthew Barnes ab6285
@@ -3437,8 +3260,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	our_op = e_calendar_new_op (ecal);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (our_op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	g_mutex_unlock (ecal->priv->mutex);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	/* create the CORBA user list to be passed to the backend */
Matthew Barnes ab6285
@@ -3458,7 +3279,6 @@
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
 	if (BONOBO_EX (&ev)) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		CORBA_exception_free (&ev;;
Matthew Barnes ab6285
@@ -3470,15 +3290,12 @@
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
 	CORBA_exception_free (&ev;;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	/* wait for something to happen (both cancellation and a
Matthew Barnes ab6285
-	   successful response will notity us via our cv */
Matthew Barnes ab6285
-	g_cond_wait (our_op->cond, our_op->mutex);
Matthew Barnes ab6285
+	e_flag_wait (our_op->done);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	status = our_op->status;
Matthew Barnes ab6285
 	*freebusy = our_op->list;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-	g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 	e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	E_CALENDAR_CHECK_STATUS (status, error);
Matthew Barnes ab6285
@@ -4169,8 +3986,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	our_op = e_calendar_new_op (ecal);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (our_op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	g_mutex_unlock (ecal->priv->mutex);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	e_cal_component_get_uid (comp, &uid);
Matthew Barnes ab6285
@@ -4180,7 +3995,6 @@
Matthew Barnes ab6285
 	GNOME_Evolution_Calendar_Cal_discardAlarm (priv->cal, uid, auid, &ev;;
Matthew Barnes ab6285
 	if (BONOBO_EX (&ev)) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		CORBA_exception_free (&ev;;
Matthew Barnes ab6285
@@ -4192,14 +4006,11 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_free (&ev;;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	/* wait for something to happen (both cancellation and a
Matthew Barnes ab6285
-	   successful response will notity us via our cv */
Matthew Barnes ab6285
-	g_cond_wait (our_op->cond, our_op->mutex);
Matthew Barnes ab6285
+	e_flag_wait (our_op->done);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	status = our_op->status;
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
 	e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-	g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 	e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	E_CALENDAR_CHECK_STATUS (status, error);
Matthew Barnes ab6285
@@ -4415,8 +4226,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	our_op = e_calendar_new_op (ecal);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (our_op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	g_mutex_unlock (ecal->priv->mutex);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_init (&ev;;
Matthew Barnes ab6285
@@ -4424,7 +4233,6 @@
Matthew Barnes ab6285
 	GNOME_Evolution_Calendar_Cal_createObject (priv->cal, icalcomponent_as_ical_string (icalcomp), &ev;;
Matthew Barnes ab6285
 	if (BONOBO_EX (&ev)) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		CORBA_exception_free (&ev;;
Matthew Barnes ab6285
@@ -4436,16 +4244,13 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_free (&ev;;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	/* wait for something to happen (both cancellation and a
Matthew Barnes ab6285
-	   successful response will notity us via our cv */
Matthew Barnes ab6285
-	g_cond_wait (our_op->cond, our_op->mutex);
Matthew Barnes ab6285
+	e_flag_wait (our_op->done);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	status = our_op->status;
Matthew Barnes ab6285
 	if (uid)
Matthew Barnes ab6285
 		*uid = our_op->uid;
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
 	e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-	g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 	e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	E_CALENDAR_CHECK_STATUS (status, error);
Matthew Barnes ab6285
@@ -4495,8 +4300,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	our_op = e_calendar_new_op (ecal);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (our_op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	g_mutex_unlock (ecal->priv->mutex);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_init (&ev;;
Matthew Barnes ab6285
@@ -4504,7 +4307,6 @@
Matthew Barnes ab6285
 	GNOME_Evolution_Calendar_Cal_modifyObject (priv->cal, icalcomponent_as_ical_string (icalcomp), mod, &ev;;
Matthew Barnes ab6285
 	if (BONOBO_EX (&ev)) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		CORBA_exception_free (&ev;;
Matthew Barnes ab6285
@@ -4516,14 +4318,11 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_free (&ev;;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	/* wait for something to happen (both cancellation and a
Matthew Barnes ab6285
-	   successful response will notity us via our cv */
Matthew Barnes ab6285
-	g_cond_wait (our_op->cond, our_op->mutex);
Matthew Barnes ab6285
+	e_flag_wait (our_op->done);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	status = our_op->status;
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
 	e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-	g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 	e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	E_CALENDAR_CHECK_STATUS (status, error);
Matthew Barnes ab6285
@@ -4576,8 +4375,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	our_op = e_calendar_new_op (ecal);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (our_op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	g_mutex_unlock (ecal->priv->mutex);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 
Matthew Barnes ab6285
@@ -4586,7 +4383,6 @@
Matthew Barnes ab6285
 	GNOME_Evolution_Calendar_Cal_removeObject (priv->cal, uid, rid ? rid : "", mod, &ev;;
Matthew Barnes ab6285
 	if (BONOBO_EX (&ev)) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		CORBA_exception_free (&ev;;
Matthew Barnes ab6285
@@ -4598,14 +4394,11 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_free (&ev;;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	/* wait for something to happen (both cancellation and a
Matthew Barnes ab6285
-	   successful response will notity us via our cv */
Matthew Barnes ab6285
-	g_cond_wait (our_op->cond, our_op->mutex);
Matthew Barnes ab6285
+	e_flag_wait (our_op->done);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	status = our_op->status;
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
 	e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-	g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 	e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	E_CALENDAR_CHECK_STATUS (status, error);
Matthew Barnes ab6285
@@ -4670,8 +4463,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	our_op = e_calendar_new_op (ecal);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (our_op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	g_mutex_unlock (ecal->priv->mutex);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_init (&ev;;
Matthew Barnes ab6285
@@ -4679,7 +4470,6 @@
Matthew Barnes ab6285
 	GNOME_Evolution_Calendar_Cal_receiveObjects (priv->cal, icalcomponent_as_ical_string (icalcomp), &ev;;
Matthew Barnes ab6285
 	if (BONOBO_EX (&ev)) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		CORBA_exception_free (&ev;;
Matthew Barnes ab6285
@@ -4691,14 +4481,11 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_free (&ev;;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	/* wait for something to happen (both cancellation and a
Matthew Barnes ab6285
-	   successful response will notity us via our cv */
Matthew Barnes ab6285
-	g_cond_wait (our_op->cond, our_op->mutex);
Matthew Barnes ab6285
+	e_flag_wait (our_op->done);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	status = our_op->status;
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
 	e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-	g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 	e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	E_CALENDAR_CHECK_STATUS (status, error);
Matthew Barnes ab6285
@@ -4744,8 +4531,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	our_op = e_calendar_new_op (ecal);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (our_op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	g_mutex_unlock (ecal->priv->mutex);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_init (&ev;;
Matthew Barnes ab6285
@@ -4753,7 +4538,6 @@
Matthew Barnes ab6285
 	GNOME_Evolution_Calendar_Cal_sendObjects (priv->cal, icalcomponent_as_ical_string (icalcomp), &ev;;
Matthew Barnes ab6285
 	if (BONOBO_EX (&ev)) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		CORBA_exception_free (&ev;;
Matthew Barnes ab6285
@@ -4765,9 +4549,7 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_free (&ev;;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	/* wait for something to happen (both cancellation and a
Matthew Barnes ab6285
-	   successful response will notity us via our cv */
Matthew Barnes ab6285
-	g_cond_wait (our_op->cond, our_op->mutex);
Matthew Barnes ab6285
+	e_flag_wait (our_op->done);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	status = our_op->status;
Matthew Barnes ab6285
 	*users = our_op->list;
Matthew Barnes ab6285
@@ -4788,7 +4570,6 @@
Matthew Barnes ab6285
 	g_free (our_op->string);
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
 	e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-	g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 	e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	E_CALENDAR_CHECK_STATUS (status, error);
Matthew Barnes ab6285
@@ -4833,8 +4614,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	our_op = e_calendar_new_op (ecal);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (our_op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	g_mutex_unlock (priv->mutex);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	/* Check for well known zones and in the cache */
Matthew Barnes ab6285
@@ -4843,7 +4622,6 @@
Matthew Barnes ab6285
 	/* If tzid is NULL or "" we return NULL, since it is a 'local time'. */
Matthew Barnes ab6285
 	if (!tzid || !tzid[0]) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		*zone = NULL;
Matthew Barnes ab6285
@@ -4861,7 +4639,6 @@
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
 	if (*zone) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_OK, error);	
Matthew Barnes ab6285
@@ -4873,7 +4650,6 @@
Matthew Barnes ab6285
 	GNOME_Evolution_Calendar_Cal_getTimezone (priv->cal, tzid, &ev;;
Matthew Barnes ab6285
 	if (BONOBO_EX (&ev)) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		CORBA_exception_free (&ev;;
Matthew Barnes ab6285
@@ -4885,9 +4661,7 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_free (&ev;;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	/* wait for something to happen (both cancellation and a
Matthew Barnes ab6285
-	   successful response will notity us via our cv */
Matthew Barnes ab6285
-	g_cond_wait (our_op->cond, our_op->mutex);
Matthew Barnes ab6285
+	e_flag_wait (our_op->done);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	status = our_op->status;
Matthew Barnes ab6285
         if (status != E_CALENDAR_STATUS_OK){ 
Matthew Barnes ab6285
@@ -4901,7 +4675,6 @@
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
 	if (!icalcomp) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		E_CALENDAR_CHECK_STATUS (status, error);
Matthew Barnes ab6285
@@ -4912,7 +4685,6 @@
Matthew Barnes ab6285
 		icaltimezone_free (*zone, 1);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_OBJECT_NOT_FOUND, error);
Matthew Barnes ab6285
@@ -4922,7 +4694,6 @@
Matthew Barnes ab6285
 	g_hash_table_insert (priv->timezones, icaltimezone_get_tzid (*zone), *zone);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-	g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 	e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	E_CALENDAR_CHECK_STATUS (status, error);
Matthew Barnes ab6285
@@ -4967,15 +4738,12 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	our_op = e_calendar_new_op (ecal);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (our_op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	g_mutex_unlock (priv->mutex);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	/* Make sure we have a valid component - UTC doesn't, nor do
Matthew Barnes ab6285
 	 * we really have to add it */
Matthew Barnes ab6285
 	if (izone == icaltimezone_get_utc_timezone ()) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 		
Matthew Barnes ab6285
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_OK, error);
Matthew Barnes ab6285
@@ -4984,7 +4752,6 @@
Matthew Barnes ab6285
 	icalcomp = icaltimezone_get_component (izone);
Matthew Barnes ab6285
 	if (!icalcomp) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_INVALID_ARG, error);
Matthew Barnes ab6285
@@ -4999,7 +4766,6 @@
Matthew Barnes ab6285
 	GNOME_Evolution_Calendar_Cal_addTimezone (priv->cal, tzobj, &ev;;
Matthew Barnes ab6285
 	if (BONOBO_EX (&ev)) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		CORBA_exception_free (&ev;;
Matthew Barnes ab6285
@@ -5011,14 +4777,11 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_free (&ev;;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	/* wait for something to happen (both cancellation and a
Matthew Barnes ab6285
-	   successful response will notity us via our cv */
Matthew Barnes ab6285
-	g_cond_wait (our_op->cond, our_op->mutex);
Matthew Barnes ab6285
+	e_flag_wait (our_op->done);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	status = our_op->status;
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
 	e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-	g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 	e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	E_CALENDAR_CHECK_STATUS (status, error);
Matthew Barnes ab6285
@@ -5060,8 +4823,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	our_op = e_calendar_new_op (ecal);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (our_op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	g_mutex_unlock (ecal->priv->mutex);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_init (&ev;;
Matthew Barnes ab6285
@@ -5071,7 +4832,6 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	if (BONOBO_EX (&ev)) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		CORBA_exception_free (&ev;;
Matthew Barnes ab6285
@@ -5083,9 +4843,7 @@
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
 	CORBA_exception_free (&ev;;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	/* wait for something to happen (both cancellation and a
Matthew Barnes ab6285
-	   successful response will notity us via our cv */
Matthew Barnes ab6285
-	g_cond_wait (our_op->cond, our_op->mutex);
Matthew Barnes ab6285
+	e_flag_wait (our_op->done);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	status = our_op->status;
Matthew Barnes ab6285
 	*query = our_op->query;
Matthew Barnes ab6285
@@ -5093,7 +4851,6 @@
Matthew Barnes ab6285
 	bonobo_object_unref (BONOBO_OBJECT (our_op->listener));
Matthew Barnes ab6285
 	
Matthew Barnes ab6285
 	e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-	g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 	e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	E_CALENDAR_CHECK_STATUS (status, error);
Matthew Barnes ab6285
@@ -5174,15 +4931,12 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	our_op = e_calendar_new_op (ecal);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	g_mutex_lock (our_op->mutex);
Matthew Barnes ab6285
-
Matthew Barnes ab6285
 	g_mutex_unlock (priv->mutex);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	/* FIXME Adding it to the server to change the tzid */
Matthew Barnes ab6285
 	icalcomp = icaltimezone_get_component (zone);
Matthew Barnes ab6285
 	if (!icalcomp) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		E_CALENDAR_CHECK_STATUS (E_CALENDAR_STATUS_INVALID_ARG, error);
Matthew Barnes ab6285
@@ -5197,7 +4951,6 @@
Matthew Barnes ab6285
 	GNOME_Evolution_Calendar_Cal_setDefaultTimezone (priv->cal, tzobj, &ev;;
Matthew Barnes ab6285
 	if (BONOBO_EX (&ev)) {
Matthew Barnes ab6285
 		e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-		g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 		e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 		CORBA_exception_free (&ev;;
Matthew Barnes ab6285
@@ -5209,9 +4962,7 @@
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	CORBA_exception_free (&ev;;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
-	/* wait for something to happen (both cancellation and a
Matthew Barnes ab6285
-	   successful response will notity us via our cv */
Matthew Barnes ab6285
-	g_cond_wait (our_op->cond, our_op->mutex);
Matthew Barnes ab6285
+	e_flag_wait (our_op->done);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	status = our_op->status;
Matthew Barnes ab6285
 
Matthew Barnes ab6285
@@ -5223,7 +4974,6 @@
Matthew Barnes ab6285
 	}
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	e_calendar_remove_op (ecal, our_op);
Matthew Barnes ab6285
-	g_mutex_unlock (our_op->mutex);
Matthew Barnes ab6285
 	e_calendar_free_op (our_op);
Matthew Barnes ab6285
 
Matthew Barnes ab6285
 	E_CALENDAR_CHECK_STATUS (status, error);