2006-03-11 Soren Sandmann <sandmann@redhat.com>

	* TODO: updates

	* stackstash.[ch]: Make stackstash refcounted

	* collector.c, profile.c: Update for refcounted stackstash, plug
	leak.

	* collector.c (open_fd): Remove FIXME comment
This commit is contained in:
Soren Sandmann
2006-03-12 04:00:23 +00:00
committed by Søren Sandmann Pedersen
parent 849efc820d
commit 9859854cc1
6 changed files with 56 additions and 18 deletions

View File

@ -23,6 +23,7 @@ struct StackStash
{
StackNode *root;
GHashTable *nodes_by_data;
int ref_count;
};
static StackNode *
@ -39,18 +40,25 @@ stack_node_new (void)
return node;
}
/* Stach */
StackStash *
stack_stash_new (void)
static StackStash *
create_stack_stash (void)
{
StackStash *stash = g_new (StackStash, 1);
stash->root = NULL;
stash->nodes_by_data = g_hash_table_new (g_direct_hash, g_direct_equal);
stash->ref_count = 1;
return stash;
}
/* Stach */
StackStash *
stack_stash_new (void)
{
return create_stack_stash();
}
void
decorate_node (StackStash *stash,
StackNode *node)
@ -187,8 +195,8 @@ stack_node_free (StackNode *node)
g_free (node);
}
void
stack_stash_free (StackStash *stash)
static void
stack_stash_free (StackStash *stash)
{
stack_node_free (stash->root);
g_hash_table_destroy (stash->nodes_by_data);
@ -196,6 +204,21 @@ stack_stash_free (StackStash *stash)
g_free (stash);
}
void
stack_stash_unref (StackStash *stash)
{
stash->ref_count--;
if (stash->ref_count == 0)
stack_stash_free (stash);
}
StackStash *
stack_stash_ref (StackStash *stash)
{
stash->ref_count++;
return stash;
}
StackNode *
stack_stash_find_node (StackStash *stash,
gpointer data)
@ -256,10 +279,7 @@ build_hash_table (StackNode *node,
StackStash *
stack_stash_new_from_root (StackNode *root)
{
StackStash *stash = g_new (StackStash, 1);
stash->root = root;
stash->nodes_by_data = g_hash_table_new (g_direct_hash, g_direct_equal);
StackStash *stash = create_stack_stash();
build_hash_table (stash->root, stash);