summaryrefslogtreecommitdiffstats
path: root/src/sp-object.cpp
diff options
context:
space:
mode:
authorMarkus Engel <markus.engel@tum.de>2013-04-08 19:01:11 +0000
committerMarkus Engel <markus.engel@tum.de>2013-04-08 19:01:11 +0000
commit9fd15efa4ab3302f3f9d7c7473a5377af314021c (patch)
tree61c838bd878be255d82f70d0dc8b2bb8411550b7 /src/sp-object.cpp
parentAdded exception to SPFactory / basic handling to SPObject. (diff)
downloadinkscape-9fd15efa4ab3302f3f9d7c7473a5377af314021c.tar.gz
inkscape-9fd15efa4ab3302f3f9d7c7473a5377af314021c.zip
Reactivated independent reference counting in the SPObject tree.
(bzr r11608.1.88)
Diffstat (limited to 'src/sp-object.cpp')
-rw-r--r--src/sp-object.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/sp-object.cpp b/src/sp-object.cpp
index ff5426282..c2979b609 100644
--- a/src/sp-object.cpp
+++ b/src/sp-object.cpp
@@ -109,6 +109,8 @@ static gchar *sp_object_get_unique_id(SPObject *object,
SPObject::SPObject() {
debug("id=%x, typename=%s",this, g_type_name_from_instance((GTypeInstance*)object));
+ this->refCount = 1;
+
this->repr = NULL;
this->mflags = 0;
this->id = NULL;
@@ -258,6 +260,7 @@ SPObject *sp_object_ref(SPObject *object, SPObject *owner)
Inkscape::Debug::EventTracker<RefEvent> tracker(object);
//g_object_ref(G_OBJECT(object));
+ object->refCount++;
return object;
}
@@ -269,6 +272,12 @@ SPObject *sp_object_unref(SPObject *object, SPObject *owner)
Inkscape::Debug::EventTracker<UnrefEvent> tracker(object);
//g_object_unref(G_OBJECT(object));
+ object->refCount--;
+
+ if (object->refCount < 0) {
+ delete object;
+ }
+
return NULL;
}