index b18685d11f5d405d4f1290d6d742fb68d962bc8f..12f57bd81f81deeecb40ee1a4c3643095b13f712 100644 (file)
--- a/src/libnr/nr-object.cpp
+++ b/src/libnr/nr-object.cpp
#include <string.h>
#include <stdio.h>
+#include <typeinfo>
+
+#include <glib/gmem.h>
#include <libnr/nr-macros.h>
#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)
{
{
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<Debug::Event::FINALIZERS> 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<NRObject *>(base);
+ Debug::EventTracker<FinalizerEvent> tracker(object);
object->klass->finalize(object);
object->~NRObject();
}
listener->vector->dispose(object, listener->data);
}
}
- free (aobject->callbacks);
+ g_free (aobject->callbacks);
}
((NRObjectClass *) (parent_class))->finalize(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;
}
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];