diff --git a/ChangeLog b/ChangeLog index 0df5fb15..206c7181 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2006-11-19 Soren Sandmann + + * profile.c (profile_load): Use stack_node_new() o + (profile_load): Use set_root() instead of new_from_root(); + + * stackstash.c (stack_stash_new_from_root): Delete this function + (stack_stash_set_root): Add this function + (stack_node_new): Export this function + 2006-11-19 Soren Sandmann * binparser.h: Declare bin_parser_free(); diff --git a/profile.c b/profile.c index d6cfb365..c8f9a855 100644 --- a/profile.c +++ b/profile.c @@ -199,11 +199,13 @@ profile_load (const char *filename, GError **err) sfile_end_get (input, "object", string); } sfile_end_get (input, "objects", NULL); + + profile->stash = stack_stash_new ((GDestroyNotify)g_free); n = sfile_begin_get_list (input, "nodes"); for (i = 0; i < n; ++i) { - StackNode *node = g_new (StackNode, 1); + StackNode *node = stack_node_new (); sfile_begin_get_record (input, "node"); @@ -225,7 +227,7 @@ profile_load (const char *filename, GError **err) sformat_free (format); sfile_input_free (input); - profile->stash = stack_stash_new_from_root (root, (GDestroyNotify)g_free); + stack_stash_set_root (profile->stash, root); return profile; } diff --git a/stackstash.c b/stackstash.c index 25e18599..dd09069a 100644 --- a/stackstash.c +++ b/stackstash.c @@ -27,7 +27,7 @@ struct StackStash GDestroyNotify destroy; }; -static StackNode * +StackNode * stack_node_new (void) { StackNode *node = g_new (StackNode, 1); @@ -296,15 +296,13 @@ build_hash_table (StackNode *node, stash->nodes_by_data, node->address, node); } -StackStash * -stack_stash_new_from_root (StackNode *root, - GDestroyNotify destroy) +void +stack_stash_set_root (StackStash *stash, + StackNode *root) { - StackStash *stash = create_stack_stash (destroy); - - stash->root = root; + g_return_if_fail (stash->root == NULL); + g_return_if_fail (g_hash_table_size (stash->nodes_by_data) == 0); + stash->root = root; build_hash_table (stash->root, stash); - - return stash; } diff --git a/stackstash.h b/stackstash.h index 30b9b778..d926a3ff 100644 --- a/stackstash.h +++ b/stackstash.h @@ -49,8 +49,7 @@ typedef void (* StackNodeFunc) (StackNode *node, /* Stach */ StackStash *stack_stash_new (GDestroyNotify destroy); -StackStash *stack_stash_new_from_root (StackNode *root, - GDestroyNotify destroy); +StackNode * stack_node_new (void); void stack_stash_add_trace (StackStash *stash, gulong *addrs, gint n_addrs, @@ -69,6 +68,7 @@ void stack_stash_foreach_by_address (StackStash *stash, StackNode *stack_stash_get_root (StackStash *stash); StackStash *stack_stash_ref (StackStash *stash); void stack_stash_unref (StackStash *stash); - +void stack_stash_set_root (StackStash *stash, + StackNode *root); #endif