aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Williams <peterw@ximian.com>2001-08-29 02:28:14 +0800
committerPeter Williams <peterw@src.gnome.org>2001-08-29 02:28:14 +0800
commit61b4c7ffee31357507683b7b0e1d1dc0d1e0f58e (patch)
tree607e5870c26adb40579041c8062022771027c8e9
parent7acc488236b777678bc85179c9c2f7530528884f (diff)
downloadgsoc2013-evolution-61b4c7ffee31357507683b7b0e1d1dc0d1e0f58e.tar.gz
gsoc2013-evolution-61b4c7ffee31357507683b7b0e1d1dc0d1e0f58e.tar.zst
gsoc2013-evolution-61b4c7ffee31357507683b7b0e1d1dc0d1e0f58e.zip
Make the locking more fine-grained on destruction; specifically, don't
2001-08-28 Peter Williams <peterw@ximian.com> * camel-object.c (camel_object_unref): Make the locking more fine-grained on destruction; specifically, don't hold the type lock while calling the finalize functions. svn path=/trunk/; revision=12501
-rw-r--r--camel/ChangeLog6
-rw-r--r--camel/camel-object.c6
2 files changed, 12 insertions, 0 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog
index 070ce611d5..8f87491d3d 100644
--- a/camel/ChangeLog
+++ b/camel/ChangeLog
@@ -1,3 +1,9 @@
+2001-08-28 Peter Williams <peterw@ximian.com>
+
+ * camel-object.c (camel_object_unref): Make the locking more
+ fine-grained on destruction; specifically, don't hold the
+ type lock while calling the finalize functions.
+
2001-08-27 Jeffrey Stedfast <fejj@ximian.com>
* providers/local/camel-local-provider.c: Changed the
diff --git a/camel/camel-object.c b/camel/camel-object.c
index 703503b15b..ed8c255eaf 100644
--- a/camel/camel-object.c
+++ b/camel/camel-object.c
@@ -529,6 +529,10 @@ camel_object_unref (CamelObject * obj)
GINT_TO_POINTER (iter->parent));
}
+ /* ok, done with the type stuff, and our data pointers
+ * won't go bad. */
+ camel_type_lock_down ();
+
parents = g_slist_reverse (parents);
head = parents;
@@ -562,6 +566,8 @@ camel_object_unref (CamelObject * obj)
/* Tuck away the pointer for use in a new object */
+ camel_type_lock_up ();
+
type_info->free_instances =
g_list_prepend (type_info->free_instances, obj);