From 5b0c4fec31b17b92d01f4eeccfd4bc4af8484865 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Tue, 25 Jan 2011 17:03:53 +0000 Subject: Fix memory leaks. Push builtin URIs (rdf:type, etc) on parser creation/deletion, rather than at each parse. git-svn-id: http://svn.drobilla.net/serd/trunk@67 490d8e77-9747-427b-9fa3-0b8f29cee8a0 --- src/serdi.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'src/serdi.c') diff --git a/src/serdi.c b/src/serdi.c index 467c3275..5ab5e440 100644 --- a/src/serdi.c +++ b/src/serdi.c @@ -56,6 +56,7 @@ string_sink(const void* buf, size_t len, void* stream) return len; } +// FIXME: doesn't belong here static SerdNode serd_node_new_uri(const SerdURI* uri, SerdURI* out) { @@ -86,6 +87,13 @@ serd_node_new_uri(const SerdURI* uri, SerdURI* out) return node; } +// FIXME: doesn't belong here +static void +serd_node_free(SerdNode* node) +{ + free((uint8_t*)node->buf); // FIXME: ick, const cast +} + static uint8_t* copy_string(const uint8_t* str, size_t* n_bytes) { @@ -113,7 +121,8 @@ event_base(void* handle, return false; } base_uri_node = serd_node_new_uri(&abs_base_uri, &base_uri); - + + serd_node_free(&state->base_uri_node); state->base_uri_node = base_uri_node; state->base_uri = base_uri; serd_writer_set_base_uri(state->writer, &base_uri); @@ -138,6 +147,7 @@ event_prefix(void* handle, SerdURI base_uri; SerdNode base_uri_node = serd_node_new_uri(&abs_uri, &base_uri); serd_env_add(state->env, name, &base_uri_node); + serd_node_free(&base_uri_node); } else { serd_env_add(state->env, name, uri_node); } @@ -288,7 +298,8 @@ main(int argc, char** argv) serd_writer_free(state.writer); serd_env_free(state.env); - free(base_uri_str); + + serd_node_free(&state.base_uri_node); if (success) { return 0; -- cgit v1.2.1