mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
updates
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:
committed by
Søren Sandmann Pedersen
parent
849efc820d
commit
9859854cc1
38
stackstash.c
38
stackstash.c
@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user