[evolution-patches] locking on calendar backends patch



After running a few days with JP's patch with no problems, I think this
is ok to commit. This includes, apart from JP patch, the needed calls in
the other backends to make all them lock operations.
-- 
Rodrigo Moya <rodrigo novell com>
? .ChangeLogcvsdiff.swp
? config.guess
? config.sub
? depcomp
? install-sh
? ltmain.sh
? missing
? mkinstalldirs
? ylwrap
? tests/ecal/test-recur
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/ChangeLog,v
retrieving revision 1.422
diff -u -p -r1.422 ChangeLog
--- ChangeLog	17 Feb 2005 10:15:17 -0000	1.422
+++ ChangeLog	18 Feb 2005 11:40:45 -0000
@@ -1,3 +1,35 @@
+2005-02-18  Rodrigo Moya <rodrigo novell com>
+
+	* backends/http/e-cal-backend-http.c (e_cal_backend_http_init):
+	* backends/groupwise/e-cal-backend-groupwise.c
+	(e_cal_backend_groupwise_init):
+	* backends/weather/e-cal-backend-weather.c
+	(e_cal_backend_weather_init): set backend's lock to TRUE.
+
+2005-02-18  JP Rosevear  <jpr novell com>
+
+	* libedata-cal/e-cal-backend-sync.c: added a lock wrapper to make
+	calls be locked if backend is set so.
+	(e_cal_backend_sync_set_lock): new function.
+	(e_cal_backend_sync_is_read_only, e_cal_backend_sync_get_cal_address,
+	e_cal_backend_sync_get_alarm_email_address,
+	e_cal_backend_sync_get_ldap_attribute,
+	e_cal_backend_sync_get_static_capabilities, e_cal_backend_sync_open,
+	e_cal_backend_sync_remove, e_cal_backend_sync_create_object,
+	e_cal_backend_sync_modify_object, e_cal_backend_sync_remove_object,
+	e_cal_backend_sync_discard_alarm, e_cal_backend_sync_receive_objects,
+	e_cal_backend_sync_send_objects, e_cal_backend_sync_get_default_object,
+	e_cal_backend_sync_get_object, e_cal_backend_sync_get_object_list,
+	e_cal_backend_sync_get_timezone, e_cal_backend_sync_add_timezone,
+	e_cal_backend_sync_set_default_timezone, e_cal_backend_sync_get_changes,
+	e_cal_backend_sync_get_free_busy): wrap calls to backend methods in
+	our lock wrapper.
+
+	* backends/contacts/e-cal-backend-contacts.c
+	(e_cal_backend_contacts_init):
+	* backends/file/e-cal-backend-file.c (e_cal_backend_file_init):
+	set backend's lock to TRUE.
+
 2005-02-17  Chenthill Palanisamy  <pchenthill novell com>
 
 	* backends/groupwise/e-cal-backend-groupwise.c: 
Index: backends/contacts/e-cal-backend-contacts.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/backends/contacts/e-cal-backend-contacts.c,v
retrieving revision 1.16
diff -u -p -r1.16 e-cal-backend-contacts.c
--- backends/contacts/e-cal-backend-contacts.c	2 Feb 2005 18:44:30 -0000	1.16
+++ backends/contacts/e-cal-backend-contacts.c	18 Feb 2005 11:40:45 -0000
@@ -933,6 +933,8 @@ e_cal_backend_contacts_init (ECalBackend
 	priv->default_zone = icaltimezone_get_utc_timezone ();
         
 	cbc->priv = priv;
+
+	e_cal_backend_sync_set_lock (E_CAL_BACKEND_SYNC (cbc), TRUE);
 }
 
 /* Class initialization function for the contacts backend */
Index: backends/file/e-cal-backend-file.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/backends/file/e-cal-backend-file.c,v
retrieving revision 1.52
diff -u -p -r1.52 e-cal-backend-file.c
--- backends/file/e-cal-backend-file.c	8 Feb 2005 11:29:43 -0000	1.52
+++ backends/file/e-cal-backend-file.c	18 Feb 2005 11:40:45 -0000
@@ -2430,7 +2430,7 @@ e_cal_backend_file_send_objects (ECalBac
 
 /* Object initialization function for the file backend */
 static void
-e_cal_backend_file_init (ECalBackendFile *cbfile, ECalBackendFileClass *class)
+e_cal_backend_file_init (ECalBackendFile *cbfile)
 {
 	ECalBackendFilePrivate *priv;
 
@@ -2449,6 +2449,8 @@ e_cal_backend_file_init (ECalBackendFile
 
 	/* The timezone defaults to UTC. */
 	priv->default_zone = icaltimezone_get_utc_timezone ();
+
+	e_cal_backend_sync_set_lock (E_CAL_BACKEND_SYNC (cbfile), TRUE);
 }
 
 /* Class initialization function for the file backend */
Index: backends/groupwise/e-cal-backend-groupwise.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/backends/groupwise/e-cal-backend-groupwise.c,v
retrieving revision 1.128
diff -u -p -r1.128 e-cal-backend-groupwise.c
--- backends/groupwise/e-cal-backend-groupwise.c	17 Feb 2005 10:15:18 -0000	1.128
+++ backends/groupwise/e-cal-backend-groupwise.c	18 Feb 2005 11:40:46 -0000
@@ -1966,6 +1966,8 @@ e_cal_backend_groupwise_init (ECalBacken
 	priv->mutex = g_mutex_new ();
 
 	cbgw->priv = priv;
+
+	e_cal_backend_sync_set_lock (E_CAL_BACKEND_SYNC (cbgw), TRUE);
 }
 
 /* Class initialization function for the gw backend */
Index: backends/http/e-cal-backend-http.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/backends/http/e-cal-backend-http.c,v
retrieving revision 1.29
diff -u -p -r1.29 e-cal-backend-http.c
--- backends/http/e-cal-backend-http.c	2 Feb 2005 18:44:31 -0000	1.29
+++ backends/http/e-cal-backend-http.c	18 Feb 2005 11:40:46 -0000
@@ -960,6 +960,8 @@ e_cal_backend_http_init (ECalBackendHttp
 	priv->uri = NULL;
 	priv->reload_timeout_id = 0;
 	priv->opened = FALSE;
+
+	e_cal_backend_sync_set_lock (E_CAL_BACKEND_SYNC (cbhttp), TRUE);
 }
 
 /* Class initialization function for the file backend */
Index: backends/weather/e-cal-backend-weather.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/backends/weather/e-cal-backend-weather.c,v
retrieving revision 1.6
diff -u -p -r1.6 e-cal-backend-weather.c
--- backends/weather/e-cal-backend-weather.c	7 Feb 2005 22:00:26 -0000	1.6
+++ backends/weather/e-cal-backend-weather.c	18 Feb 2005 11:40:46 -0000
@@ -829,6 +829,8 @@ e_cal_backend_weather_init (ECalBackendW
 	priv->city = NULL;
 
 	priv->zones = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, free_zone);
+
+	e_cal_backend_sync_set_lock (E_CAL_BACKEND_SYNC (cbw), TRUE);
 }
 
 /* Class initialization function for the weather backend */
Index: libedata-cal/e-cal-backend-sync.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/libedata-cal/e-cal-backend-sync.c,v
retrieving revision 1.12
diff -u -p -r1.12 e-cal-backend-sync.c
--- libedata-cal/e-cal-backend-sync.c	20 Dec 2004 15:33:24 -0000	1.12
+++ libedata-cal/e-cal-backend-sync.c	18 Feb 2005 11:40:46 -0000
@@ -13,83 +13,104 @@
 #include "e-cal-backend-sync.h"
 
 struct _ECalBackendSyncPrivate {
-	int mumble;
 	GMutex *sync_mutex;
+
+	gboolean mutex_lock;
 };
 
+#define LOCK_WRAPPER(func, args) \
+  g_assert (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->func); \
+  if (backend->priv->mutex_lock) \
+    g_mutex_lock (backend->priv->sync_mutex); \
+  status = (* E_CAL_BACKEND_SYNC_GET_CLASS (backend)->func) args; \
+  if (backend->priv->mutex_lock) \
+    g_mutex_unlock (backend->priv->sync_mutex); \
+  return status;
+
 static GObjectClass *parent_class;
 
+void
+e_cal_backend_sync_set_lock (ECalBackendSync *backend, gboolean lock)
+{
+	g_return_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend));
+
+	backend->priv->mutex_lock = lock;
+}
+
 ECalBackendSyncStatus
 e_cal_backend_sync_is_read_only  (ECalBackendSync *backend, EDataCal *cal, gboolean *read_only)
 {
+	ECalBackendSyncStatus status;
+
 	g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
 	g_return_val_if_fail (read_only, GNOME_Evolution_Calendar_OtherError);
 
-	g_assert (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->is_read_only_sync);
+	LOCK_WRAPPER (is_read_only_sync, (backend, cal, read_only));
 
-	return (* E_CAL_BACKEND_SYNC_GET_CLASS (backend)->is_read_only_sync) (backend, cal, read_only);
+	return status;
 }
 
 ECalBackendSyncStatus
 e_cal_backend_sync_get_cal_address  (ECalBackendSync *backend, EDataCal *cal, char **address)
 {
+	ECalBackendSyncStatus status;
+
 	g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
 	g_return_val_if_fail (address, GNOME_Evolution_Calendar_OtherError);
 
-	g_assert (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->get_cal_address_sync);
+	LOCK_WRAPPER (get_cal_address_sync, (backend, cal, address));
 
-	return (* E_CAL_BACKEND_SYNC_GET_CLASS (backend)->get_cal_address_sync) (backend, cal, address);
+	return status;
 }
 
 ECalBackendSyncStatus
 e_cal_backend_sync_get_alarm_email_address  (ECalBackendSync *backend, EDataCal *cal, char **address)
 {
+	ECalBackendSyncStatus status;
+
 	g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
 	g_return_val_if_fail (address, GNOME_Evolution_Calendar_OtherError);
 
-	g_assert (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->get_alarm_email_address_sync);
+	LOCK_WRAPPER (get_alarm_email_address_sync, (backend, cal, address));
 
-	return (* E_CAL_BACKEND_SYNC_GET_CLASS (backend)->get_alarm_email_address_sync) (backend, cal, address);
+	return status;
 }
 
 ECalBackendSyncStatus
 e_cal_backend_sync_get_ldap_attribute  (ECalBackendSync *backend, EDataCal *cal, char **attribute)
 {
+	ECalBackendSyncStatus status;
+
 	g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
 	g_return_val_if_fail (attribute, GNOME_Evolution_Calendar_OtherError);
 
-	g_assert (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->get_ldap_attribute_sync);
+	LOCK_WRAPPER (get_ldap_attribute_sync, (backend, cal, attribute));
 
-	return (* E_CAL_BACKEND_SYNC_GET_CLASS (backend)->get_ldap_attribute_sync) (backend, cal, attribute);
+	return status;
 }
 
 ECalBackendSyncStatus
 e_cal_backend_sync_get_static_capabilities  (ECalBackendSync *backend, EDataCal *cal, char **capabilities)
 {
+	ECalBackendSyncStatus status;
+
 	g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
 	g_return_val_if_fail (capabilities, GNOME_Evolution_Calendar_OtherError);
 
-	g_assert (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->get_static_capabilities_sync);
+	LOCK_WRAPPER (get_static_capabilities_sync, (backend, cal, capabilities));
 
-	return (* E_CAL_BACKEND_SYNC_GET_CLASS (backend)->get_static_capabilities_sync) (backend, cal, capabilities);
+	return status;
 }
 
 ECalBackendSyncStatus
 e_cal_backend_sync_open  (ECalBackendSync *backend, EDataCal *cal, gboolean only_if_exists,
 			  const char *username, const char *password)
 {
-	ECalBackendSyncPrivate *priv;
 	ECalBackendSyncStatus status;
 	
 	g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
-	g_assert (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->open_sync);
-	priv = backend->priv;
-
-	g_mutex_lock (priv->sync_mutex);
 
-	status = (* E_CAL_BACKEND_SYNC_GET_CLASS (backend)->open_sync) (backend, cal, only_if_exists, username, password);
-
-	g_mutex_unlock (priv->sync_mutex);
+	LOCK_WRAPPER (open_sync, (backend, cal, only_if_exists, username, password));
 
 	return status;
 }
@@ -97,139 +118,175 @@ e_cal_backend_sync_open  (ECalBackendSyn
 ECalBackendSyncStatus
 e_cal_backend_sync_remove  (ECalBackendSync *backend, EDataCal *cal)
 {
-	g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
-
-	g_assert (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->remove_sync);
-
-	return (* E_CAL_BACKEND_SYNC_GET_CLASS (backend)->remove_sync) (backend, cal);
+ 	ECalBackendSyncStatus status;
+  
+ 	g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
+  
+ 	LOCK_WRAPPER (remove_sync, (backend, cal));
+ 	
+ 	return status;
 }
 
 ECalBackendSyncStatus
 e_cal_backend_sync_create_object (ECalBackendSync *backend, EDataCal *cal, char **calobj, char **uid)
 {
-	g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
-	g_return_val_if_fail (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->create_object_sync != NULL,
-			      GNOME_Evolution_Calendar_UnsupportedMethod);
-
-	return (* E_CAL_BACKEND_SYNC_GET_CLASS (backend)->create_object_sync) (backend, cal, calobj, uid);
+ 	ECalBackendSyncStatus status;
+ 
+  	g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
+  	g_return_val_if_fail (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->create_object_sync != NULL,
+  			      GNOME_Evolution_Calendar_UnsupportedMethod);
+  
+ 	LOCK_WRAPPER (create_object_sync, (backend, cal, calobj, uid));
+ 
+ 	return status;
 }
 
 ECalBackendSyncStatus
 e_cal_backend_sync_modify_object (ECalBackendSync *backend, EDataCal *cal, const char *calobj, 
 				  CalObjModType mod, char **old_object, char **new_object)
 {
-	g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
-	g_return_val_if_fail (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->modify_object_sync != NULL,
-			      GNOME_Evolution_Calendar_UnsupportedMethod);
-
-	return (* E_CAL_BACKEND_SYNC_GET_CLASS (backend)->modify_object_sync) (backend, cal, 
-									     calobj, mod, old_object, new_object);
+ 	ECalBackendSyncStatus status;
+ 
+  	g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
+  	g_return_val_if_fail (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->modify_object_sync != NULL,
+  			      GNOME_Evolution_Calendar_UnsupportedMethod);
+  
+ 	LOCK_WRAPPER (modify_object_sync, (backend, cal, calobj, mod, old_object, new_object));
+ 
+ 	return status;
 }
 
 ECalBackendSyncStatus
 e_cal_backend_sync_remove_object (ECalBackendSync *backend, EDataCal *cal, const char *uid, const char *rid,
 				  CalObjModType mod, char **old_object, char **object)
 {
-	g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
-	g_return_val_if_fail (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->remove_object_sync != NULL,
-			      GNOME_Evolution_Calendar_UnsupportedMethod);
-
-	return (* E_CAL_BACKEND_SYNC_GET_CLASS (backend)->remove_object_sync) (backend, cal, uid, rid, mod,
-									       old_object, object);
+ 	ECalBackendSyncStatus status;
+ 
+  	g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
+  	g_return_val_if_fail (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->remove_object_sync != NULL,
+  			      GNOME_Evolution_Calendar_UnsupportedMethod);
+  
+ 	LOCK_WRAPPER (remove_object_sync, (backend, cal, uid, rid, mod, old_object, object));
+ 
+ 	return status;
 }
 
 ECalBackendSyncStatus
 e_cal_backend_sync_discard_alarm (ECalBackendSync *backend, EDataCal *cal, const char *uid, const char *auid)
 {
-	g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
-	g_return_val_if_fail (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->discard_alarm_sync != NULL,
-			      GNOME_Evolution_Calendar_UnsupportedMethod);
-
-	return (* E_CAL_BACKEND_SYNC_GET_CLASS (backend)->discard_alarm_sync) (backend, cal, uid, auid);
+ 	ECalBackendSyncStatus status;
+ 
+  	g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
+  	g_return_val_if_fail (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->discard_alarm_sync != NULL,
+  			      GNOME_Evolution_Calendar_UnsupportedMethod);
+  
+ 	LOCK_WRAPPER (discard_alarm_sync, (backend, cal, uid, auid));
+ 
+ 	return status;
 }
 
 ECalBackendSyncStatus
 e_cal_backend_sync_receive_objects (ECalBackendSync *backend, EDataCal *cal, const char *calobj)
 {
-	g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
-	g_return_val_if_fail (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->receive_objects_sync != NULL,
-			      GNOME_Evolution_Calendar_UnsupportedMethod);
-
-	return (* E_CAL_BACKEND_SYNC_GET_CLASS (backend)->receive_objects_sync) (backend, cal, calobj);
+ 	ECalBackendSyncStatus status;
+ 
+  	g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
+  	g_return_val_if_fail (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->receive_objects_sync != NULL,
+  			      GNOME_Evolution_Calendar_UnsupportedMethod);
+  
+ 	LOCK_WRAPPER (receive_objects_sync, (backend, cal, calobj));
+ 
+ 	return status;
 }
 
 ECalBackendSyncStatus
 e_cal_backend_sync_send_objects (ECalBackendSync *backend, EDataCal *cal, const char *calobj, GList **users,
 				 char **modified_calobj)
 {
-	g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
-	g_return_val_if_fail (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->send_objects_sync != NULL,
-			      GNOME_Evolution_Calendar_UnsupportedMethod);
-	
-	return (* E_CAL_BACKEND_SYNC_GET_CLASS (backend)->send_objects_sync) (backend, cal, calobj, users, modified_calobj);
+ 	ECalBackendSyncStatus status;
+ 
+  	g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
+  	g_return_val_if_fail (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->send_objects_sync != NULL,
+  			      GNOME_Evolution_Calendar_UnsupportedMethod);
+ 
+ 	LOCK_WRAPPER (send_objects_sync, (backend, cal, calobj, users, modified_calobj));
+ 
+ 	return status;
 }
 
 ECalBackendSyncStatus
 e_cal_backend_sync_get_default_object (ECalBackendSync *backend, EDataCal *cal, char **object)
 {
-	g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
-	g_return_val_if_fail (object, GNOME_Evolution_Calendar_OtherError);
-
-	g_assert (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->get_default_object_sync);
-
-	return (* E_CAL_BACKEND_SYNC_GET_CLASS (backend)->get_default_object_sync) (backend, cal, object);
+ 	ECalBackendSyncStatus status;
+ 
+  	g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
+  	g_return_val_if_fail (object, GNOME_Evolution_Calendar_OtherError);
+  
+ 	LOCK_WRAPPER (get_default_object_sync, (backend, cal, object));
+  
+ 	return status;
 }
 
 ECalBackendSyncStatus
 e_cal_backend_sync_get_object (ECalBackendSync *backend, EDataCal *cal, const char *uid, const char *rid, char **object)
 {
-	g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
-	g_return_val_if_fail (object, GNOME_Evolution_Calendar_OtherError);
-
-	g_assert (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->get_object_sync);
-
-	return (* E_CAL_BACKEND_SYNC_GET_CLASS (backend)->get_object_sync) (backend, cal, uid, rid, object);
+ 	ECalBackendSyncStatus status;
+ 
+  	g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
+  	g_return_val_if_fail (object, GNOME_Evolution_Calendar_OtherError);
+  
+ 	LOCK_WRAPPER (get_object_sync, (backend, cal, uid, rid, object));
+  
+ 	return status;
 }
 
 ECalBackendSyncStatus
 e_cal_backend_sync_get_object_list (ECalBackendSync *backend, EDataCal *cal, const char *sexp, GList **objects)
 {
-	g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
-	g_return_val_if_fail (objects, GNOME_Evolution_Calendar_OtherError);
-
-	g_assert (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->get_object_list_sync);
-
-	return (* E_CAL_BACKEND_SYNC_GET_CLASS (backend)->get_object_list_sync) (backend, cal, sexp, objects);
+ 	ECalBackendSyncStatus status;
+ 
+  	g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
+  	g_return_val_if_fail (objects, GNOME_Evolution_Calendar_OtherError);
+  
+ 	LOCK_WRAPPER (get_object_list_sync, (backend, cal, sexp, objects));
+  
+ 	return status;
 }
 
 ECalBackendSyncStatus
 e_cal_backend_sync_get_timezone (ECalBackendSync *backend, EDataCal *cal, const char *tzid, char **object)
 {
-	g_return_val_if_fail (E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
-
-	g_assert (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->get_timezone_sync != NULL);
-
-	return (* E_CAL_BACKEND_SYNC_GET_CLASS (backend)->get_timezone_sync) (backend, cal, tzid, object);
+ 	ECalBackendSyncStatus status;
+ 
+  	g_return_val_if_fail (E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
+  
+ 	LOCK_WRAPPER (get_timezone_sync, (backend, cal, tzid, object));
+  
+ 	return status;
 }
 
 ECalBackendSyncStatus
 e_cal_backend_sync_add_timezone (ECalBackendSync *backend, EDataCal *cal, const char *tzobj)
 {
-	g_return_val_if_fail (E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
-
-	g_assert (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->add_timezone_sync != NULL);
-
-	return (* E_CAL_BACKEND_SYNC_GET_CLASS (backend)->add_timezone_sync) (backend, cal, tzobj);
+ 	ECalBackendSyncStatus status;
+ 
+  	g_return_val_if_fail (E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
+  
+ 	LOCK_WRAPPER (add_timezone_sync, (backend, cal, tzobj));
+  
+ 	return status;
 }
 
 ECalBackendSyncStatus
 e_cal_backend_sync_set_default_timezone (ECalBackendSync *backend, EDataCal *cal, const char *tzid)
 {
-	g_return_val_if_fail (E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
-
-	g_assert (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->set_default_timezone_sync != NULL);
-
-	return (* E_CAL_BACKEND_SYNC_GET_CLASS (backend)->set_default_timezone_sync) (backend, cal, tzid);
+ 	ECalBackendSyncStatus status;
+ 
+  	g_return_val_if_fail (E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
+  
+ 	LOCK_WRAPPER (set_default_timezone_sync, (backend, cal, tzid));
+  
+ 	return status;
 }
 
 
@@ -237,24 +294,26 @@ ECalBackendSyncStatus
 e_cal_backend_sync_get_changes (ECalBackendSync *backend, EDataCal *cal, const char *change_id,
 			      GList **adds, GList **modifies, GList **deletes)
 {
+	ECalBackendSyncStatus status;
+
 	g_return_val_if_fail (E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
 
-	g_assert (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->get_changes_sync != NULL);
+	LOCK_WRAPPER (get_changes_sync, (backend, cal, change_id, adds, modifies, deletes));
 
-	return (* E_CAL_BACKEND_SYNC_GET_CLASS (backend)->get_changes_sync) (backend, cal, change_id, 
-									   adds, modifies, deletes);
+	return status;
 }
 
 ECalBackendSyncStatus
 e_cal_backend_sync_get_free_busy (ECalBackendSync *backend, EDataCal *cal, GList *users, 
 				time_t start, time_t end, GList **freebusy)
 {
+	ECalBackendSyncStatus status;
+
 	g_return_val_if_fail (E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
 
-	g_assert (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->get_freebusy_sync != NULL);
+	LOCK_WRAPPER (get_freebusy_sync, (backend, cal, users, start, end, freebusy));
 
-	return (* E_CAL_BACKEND_SYNC_GET_CLASS (backend)->get_freebusy_sync) (backend, cal, users, 
-									    start, end, freebusy);
+	return status;
 }
 
 
Index: libedata-cal/e-cal-backend-sync.h
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/libedata-cal/e-cal-backend-sync.h,v
retrieving revision 1.9
diff -u -p -r1.9 e-cal-backend-sync.h
--- libedata-cal/e-cal-backend-sync.h	20 Dec 2004 15:33:24 -0000	1.9
+++ libedata-cal/e-cal-backend-sync.h	18 Feb 2005 11:40:46 -0000
@@ -74,6 +74,8 @@ struct _ECalBackendSyncClass {
 
 typedef ECalBackendSync * (*ECalBackendSyncFactoryFn) (void);
 GType                e_cal_backend_sync_get_type                (void);
+void e_cal_backend_sync_set_lock (ECalBackendSync  *backend, gboolean lock);
+
 ECalBackendSyncStatus e_cal_backend_sync_is_read_only            (ECalBackendSync  *backend,
 							       EDataCal             *cal,
 							       gboolean        *read_only);


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