X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Flibnr%2Fnr-object.cpp;h=12f57bd81f81deeecb40ee1a4c3643095b13f712;hb=468127ac43dba09e4e8f0d45e0949c20db8d6512;hp=b18685d11f5d405d4f1290d6d742fb68d962bc8f;hpb=6b15695578f07a3f72c4c9475c1a261a3021472a;p=inkscape.git diff --git a/src/libnr/nr-object.cpp b/src/libnr/nr-object.cpp index b18685d11..12f57bd81 100644 --- a/src/libnr/nr-object.cpp +++ b/src/libnr/nr-object.cpp @@ -13,9 +13,16 @@ #include #include +#include + +#include #include #include "nr-object.h" +#include "debug/event-tracker.h" +#include "debug/simple-event.h" +#include "util/share.h" +#include "util/format.h" unsigned int nr_emit_fail_warning(const gchar *file, unsigned int line, const gchar *method, const gchar *expr) { @@ -71,7 +78,7 @@ NRType nr_object_register_type(NRType parent, { if (classes_len >= classes_size) { classes_size += 32; - classes = nr_renew (classes, NRObjectClass *, classes_size); + classes = g_renew (NRObjectClass *, classes, classes_size); if (classes_len == 0) { classes[0] = NULL; classes_len = 1; @@ -150,9 +157,25 @@ static void nr_class_tree_object_invoke_init(NRObjectClass *c, NRObject *object) namespace { +namespace Debug = Inkscape::Debug; +namespace Util = Inkscape::Util; + +typedef Debug::SimpleEvent BaseFinalizerEvent; + +class FinalizerEvent : public BaseFinalizerEvent { +public: + FinalizerEvent(NRObject *object) + : BaseFinalizerEvent(Util::share_static_string("nr-object-finalizer")) + { + _addProperty("object", Util::format("%p", object)); + _addProperty("class", Util::share_static_string(typeid(*object).name())); + } +}; + void finalize_object(void *base, void *) { NRObject *object = reinterpret_cast(base); + Debug::EventTracker tracker(object); object->klass->finalize(object); object->~NRObject(); } @@ -229,7 +252,7 @@ static void nr_active_object_finalize(NRObject *object) listener->vector->dispose(object, listener->data); } } - free (aobject->callbacks); + g_free (aobject->callbacks); } ((NRObjectClass *) (parent_class))->finalize(object); @@ -241,7 +264,7 @@ void nr_active_object_add_listener(NRActiveObject *object, void *data) { if (!object->callbacks) { - object->callbacks = (NRObjectCallbackBlock*) malloc(sizeof(NRObjectCallbackBlock)); + object->callbacks = (NRObjectCallbackBlock*)g_malloc(sizeof(NRObjectCallbackBlock)); object->callbacks->size = 1; object->callbacks->length = 0; } @@ -249,7 +272,7 @@ void nr_active_object_add_listener(NRActiveObject *object, if (object->callbacks->length >= object->callbacks->size) { int newsize = object->callbacks->size << 1; object->callbacks = (NRObjectCallbackBlock *) - realloc(object->callbacks, sizeof(NRObjectCallbackBlock) + (newsize - 1) * sizeof (NRObjectListener)); + g_realloc(object->callbacks, sizeof(NRObjectCallbackBlock) + (newsize - 1) * sizeof (NRObjectListener)); object->callbacks->size = newsize; } @@ -271,7 +294,7 @@ void nr_active_object_remove_listener_by_data(NRActiveObject *object, void *data if ( listener->data == data ) { object->callbacks->length -= 1; if ( object->callbacks->length < 1 ) { - free(object->callbacks); + g_free(object->callbacks); object->callbacks = NULL; } else if ( object->callbacks->length != i ) { *listener = object->callbacks->listeners[object->callbacks->length];