From 6dd5b9a2a403347dccdfaa769427fd7ca4955695 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Tue, 24 May 2011 18:55:13 +0000 Subject: Free all nodes on world destruction (fix memory leaks). git-svn-id: http://svn.drobilla.net/sord/trunk@132 3d64ff67-21c5-427c-a301-fe4f08042e5a --- src/sord.c | 13 +++++++++++++ src/sordi.c | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/sord.c b/src/sord.c index fa9c074..17f90e5 100644 --- a/src/sord.c +++ b/src/sord.c @@ -169,9 +169,22 @@ sord_world_new(void) return world; } +static void +free_hash_entry(void* key, void* value, void* user_data) +{ + SordNode* node = (SordNode*)value; + if (node->node.type == SERD_LITERAL) { + sord_node_free((SordWorld*)user_data, node->datatype); + } + g_free((uint8_t*)node->node.buf); + free(node); +} + void sord_world_free(SordWorld* world) { + g_hash_table_foreach(world->literals, free_hash_entry, world); + g_hash_table_foreach(world->names, free_hash_entry, world); g_hash_table_unref(world->names); g_hash_table_unref(world->langs); g_hash_table_unref(world->literals); diff --git a/src/sordi.c b/src/sordi.c index 7681878..f2f3e59 100644 --- a/src/sordi.c +++ b/src/sordi.c @@ -212,7 +212,7 @@ main(int argc, char** argv) writer); // Write statements - sord_write_writer(sord, writer, NULL); + sord_write(sord, writer, NULL); serd_writer_finish(writer); serd_writer_free(writer); -- cgit v1.2.1