diff options
author | Akira TAGOH <akira@tagoh.org> | 2006-11-12 17:22:56 +0000 |
---|---|---|
committer | Akira TAGOH <akira@tagoh.org> | 2006-11-12 17:22:56 +0000 |
commit | c167021975803379e5612d9cd47f943dd7fc3e4b (patch) | |
tree | b2776568e4dbe65ed4dd3fd78b2d1719d57e9f86 | |
parent | d7fb234f7ce7aefe480b31617e3ad5ff387c7268 (diff) |
* hieroglyph/vm.c (hg_vm_get_save_level): just ask HgMemPool instead of
managing snapshot in VM.
* hieroglyph/hgmem.c (hg_mem_pool_get_n_snapshots): new function.
(hg_mem_pool_get_snapshot): new function.
(hg_mem_pool_clear_snapshot): new function.
(hg_mem_pool_add_root_node): renamed.
(hg_mem_pool_remove_root_node): likewise.
(hg_mem_pool_add_pool_reference): likewise.
(hg_mem_pool_remove_pool_reference): likewise.
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | hieroglyph/hgallocator-bfit.c | 2 | ||||
-rw-r--r-- | hieroglyph/hgarray.c | 4 | ||||
-rw-r--r-- | hieroglyph/hgdict.c | 4 | ||||
-rw-r--r-- | hieroglyph/hgfile.c | 6 | ||||
-rw-r--r-- | hieroglyph/hglog.c | 2 | ||||
-rw-r--r-- | hieroglyph/hgmem.c | 59 | ||||
-rw-r--r-- | hieroglyph/hgmem.h | 12 | ||||
-rw-r--r-- | hieroglyph/hgvaluenode.c | 2 | ||||
-rw-r--r-- | hieroglyph/version.h.in | 2 | ||||
-rw-r--r-- | hieroglyph/vm.c | 95 | ||||
-rw-r--r-- | plugins/debug/debug-main.c | 4 | ||||
-rw-r--r-- | plugins/libedit/libedit-main.c | 4 | ||||
-rw-r--r-- | plugins/test/test-main.c | 4 |
14 files changed, 124 insertions, 87 deletions
@@ -1,5 +1,16 @@ 2006-11-13 Akira TAGOH <at@gclab.org> + * hieroglyph/vm.c (hg_vm_get_save_level): just ask HgMemPool instead of + managing snapshot in VM. + + * hieroglyph/hgmem.c (hg_mem_pool_get_n_snapshots): new function. + (hg_mem_pool_get_snapshot): new function. + (hg_mem_pool_clear_snapshot): new function. + (hg_mem_pool_add_root_node): renamed. + (hg_mem_pool_remove_root_node): likewise. + (hg_mem_pool_add_pool_reference): likewise. + (hg_mem_pool_remove_pool_reference): likewise. + * hieroglyph/ilist.c (_hg_list_iter_delete_link): fix a memory leak. * hieroglyph/scanner.c (_hg_scanner_parse_number): push back a space diff --git a/hieroglyph/hgallocator-bfit.c b/hieroglyph/hgallocator-bfit.c index d7bd5c2..13204bd 100644 --- a/hieroglyph/hgallocator-bfit.c +++ b/hieroglyph/hgallocator-bfit.c @@ -915,7 +915,7 @@ _hg_allocator_bfit_real_save_snapshot(HgMemPool *pool) * right now the snapshot age depends on the order of releasing * a snapshot image. need better to manage the age of snapshot. */ - if (pool->snapshot_list && hg_list_length(pool->snapshot_list) >= 255) { + if (hg_mem_pool_get_n_snapshots(pool) >= 255) { hg_log_warning("Too many snapshot are creating."); return NULL; } diff --git a/hieroglyph/hgarray.c b/hieroglyph/hgarray.c index 0e3cda0..5656c82 100644 --- a/hieroglyph/hgarray.c +++ b/hieroglyph/hgarray.c @@ -352,7 +352,7 @@ hg_array_append_forcibly(HgArray *array, } } if (obj->pool != nobj->pool) - hg_mem_add_pool_reference(nobj->pool, obj->pool); + hg_mem_pool_add_pool_reference(nobj->pool, obj->pool); if (array->removed_arrays > 0) { /* remove the nodes forever */ memmove(array->arrays, array->current, sizeof (gpointer) * array->n_arrays); @@ -419,7 +419,7 @@ hg_array_replace_forcibly(HgArray *array, } } if (obj->pool != nobj->pool) - hg_mem_add_pool_reference(nobj->pool, obj->pool); + hg_mem_pool_add_pool_reference(nobj->pool, obj->pool); array->current[index] = node; return TRUE; diff --git a/hieroglyph/hgdict.c b/hieroglyph/hgdict.c index cefe1ea..f140d1d 100644 --- a/hieroglyph/hgdict.c +++ b/hieroglyph/hgdict.c @@ -1275,9 +1275,9 @@ hg_dict_insert_forcibly(HgMemPool *pool, hash = HG_DICT_HASH (dict, key); if (obj->pool != kobj->pool) - hg_mem_add_pool_reference(kobj->pool, obj->pool); + hg_mem_pool_add_pool_reference(kobj->pool, obj->pool); if (obj->pool != vobj->pool) - hg_mem_add_pool_reference(vobj->pool, obj->pool); + hg_mem_pool_add_pool_reference(vobj->pool, obj->pool); if ((l = hg_btree_find(dict->dict, GSIZE_TO_POINTER (hash))) != NULL) { HgListIter iter; diff --git a/hieroglyph/hgfile.c b/hieroglyph/hgfile.c index 8d890d1..1735049 100644 --- a/hieroglyph/hgfile.c +++ b/hieroglyph/hgfile.c @@ -230,15 +230,15 @@ hg_file_init(void) HG_MEM_GLOBAL); __hg_file_stdin = hg_file_object_new(__hg_file_mem_pool, HG_FILE_TYPE_STDIN); - hg_mem_add_root_node(__hg_file_mem_pool, __hg_file_stdin); + hg_mem_pool_add_root_node(__hg_file_mem_pool, __hg_file_stdin); __hg_file_stdout = hg_file_object_new(__hg_file_mem_pool, HG_FILE_TYPE_STDOUT); hg_object_writable((HgObject *)__hg_file_stdout); - hg_mem_add_root_node(__hg_file_mem_pool, __hg_file_stdout); + hg_mem_pool_add_root_node(__hg_file_mem_pool, __hg_file_stdout); __hg_file_stderr = hg_file_object_new(__hg_file_mem_pool, HG_FILE_TYPE_STDERR); hg_object_writable((HgObject *)__hg_file_stderr); - hg_mem_add_root_node(__hg_file_mem_pool, __hg_file_stderr); + hg_mem_pool_add_root_node(__hg_file_mem_pool, __hg_file_stderr); __hg_file_is_initialized = TRUE; } diff --git a/hieroglyph/hglog.c b/hieroglyph/hglog.c index 09782f4..cb28ac3 100644 --- a/hieroglyph/hglog.c +++ b/hieroglyph/hglog.c @@ -101,7 +101,7 @@ hg_log_init(void) HG_MEM_GLOBAL); __hg_log_options_dict = hg_dict_new(__hg_log_mem_pool, 65535); - hg_mem_add_root_node(__hg_log_mem_pool, __hg_log_options_dict); + hg_mem_pool_add_root_node(__hg_log_mem_pool, __hg_log_options_dict); __hg_log_handler = _hg_log_default_handler; __hg_log_initialized = TRUE; diff --git a/hieroglyph/hgmem.c b/hieroglyph/hgmem.c index e7b1266..401d6ed 100644 --- a/hieroglyph/hgmem.c +++ b/hieroglyph/hgmem.c @@ -463,6 +463,49 @@ hg_mem_pool_restore_snapshot(HgMemPool *pool, return pool->allocator->vtable->restore_snapshot(pool, snapshot, adjuster); } +guint +hg_mem_pool_get_n_snapshots(HgMemPool *pool) +{ + g_return_val_if_fail (pool != NULL, 0); + + if (pool->snapshot_list == NULL) + return 0; + return hg_list_length(pool->snapshot_list); +} + +HgMemSnapshot * +hg_mem_pool_get_snapshot(HgMemPool *pool, + guint n) +{ + HgMemSnapshot *retval = NULL; + HgListIter iter; + int i; + + g_return_val_if_fail (pool != NULL, NULL); + g_return_val_if_fail (hg_mem_pool_get_n_snapshots(pool) > n, NULL); + + iter = hg_list_iter_new(pool->snapshot_list); + for (i = 1; i <= n; i++) { + if (!hg_list_get_iter_next(pool->snapshot_list, iter)) { + hg_log_warning("Failed to look up the snapshot image."); + return NULL; + } + } + retval = hg_list_iter_get_data(iter); + hg_list_iter_free(iter); + + return retval; +} + +void +hg_mem_pool_clear_snapshot(HgMemPool *pool) +{ + g_return_if_fail (pool != NULL); + + hg_list_free(pool->snapshot_list); + pool->snapshot_list = NULL; +} + gboolean hg_mem_garbage_collection(HgMemPool *pool) { @@ -654,8 +697,8 @@ hg_mem_gc_mark_array_region(HgMemPool *pool, } void -hg_mem_add_root_node(HgMemPool *pool, - gpointer data) +hg_mem_pool_add_root_node(HgMemPool *pool, + gpointer data) { if (pool->root_node == NULL) pool->root_node = hg_list_new(); @@ -663,8 +706,8 @@ hg_mem_add_root_node(HgMemPool *pool, } void -hg_mem_remove_root_node(HgMemPool *pool, - gpointer data) +hg_mem_pool_remove_root_node(HgMemPool *pool, + gpointer data) { HgMemObject *obj; @@ -678,8 +721,8 @@ hg_mem_remove_root_node(HgMemPool *pool, } void -hg_mem_add_pool_reference(HgMemPool *pool, - HgMemPool *other_pool) +hg_mem_pool_add_pool_reference(HgMemPool *pool, + HgMemPool *other_pool) { HgListIter iter = NULL; @@ -701,8 +744,8 @@ hg_mem_add_pool_reference(HgMemPool *pool, } void -hg_mem_remove_pool_reference(HgMemPool *pool, - HgMemPool *other_pool) +hg_mem_pool_remove_pool_reference(HgMemPool *pool, + HgMemPool *other_pool) { g_return_if_fail (pool != NULL); g_return_if_fail (other_pool != NULL); diff --git a/hieroglyph/hgmem.h b/hieroglyph/hgmem.h index f9588d5..aa7d2d1 100644 --- a/hieroglyph/hgmem.h +++ b/hieroglyph/hgmem.h @@ -75,6 +75,10 @@ gboolean hg_mem_pool_restore_snapshot (HgMemPool *pool, HgMemSnapshot *snapshot, guint adjuster); guint8 hg_mem_pool_get_age_of_snapshot (HgMemPool *pool); +guint hg_mem_pool_get_n_snapshots (HgMemPool *pool); +HgMemSnapshot *hg_mem_pool_get_snapshot (HgMemPool *pool, + guint n); +void hg_mem_pool_clear_snapshot (HgMemPool *pool); gboolean hg_mem_garbage_collection (HgMemPool *pool); gpointer hg_mem_alloc (HgMemPool *pool, gsize size); @@ -173,13 +177,13 @@ guint8 hg_mem_pool_get_age_of_mark (HgMemPool *pool); void hg_mem_gc_mark_array_region (HgMemPool *pool, gpointer start, gpointer end); -void hg_mem_add_root_node (HgMemPool *pool, +void hg_mem_pool_add_root_node (HgMemPool *pool, gpointer data); -void hg_mem_remove_root_node (HgMemPool *pool, +void hg_mem_pool_remove_root_node (HgMemPool *pool, gpointer data); -void hg_mem_add_pool_reference (HgMemPool *pool, +void hg_mem_pool_add_pool_reference (HgMemPool *pool, HgMemPool *other_pool); -void hg_mem_remove_pool_reference (HgMemPool *pool, +void hg_mem_pool_remove_pool_reference (HgMemPool *pool, HgMemPool *other_pool); void hg_mem_pool_use_periodical_gc (HgMemPool *pool, gboolean flag); diff --git a/hieroglyph/hgvaluenode.c b/hieroglyph/hgvaluenode.c index d06ca72..dc49a82 100644 --- a/hieroglyph/hgvaluenode.c +++ b/hieroglyph/hgvaluenode.c @@ -444,7 +444,7 @@ hg_value_node_init(void) __hg_value_node_type_tree = hg_btree_new(__hg_value_node_mem_pool, BTREE_N_NODE); - hg_mem_add_root_node(__hg_value_node_mem_pool, __hg_value_node_type_tree); + hg_mem_pool_add_root_node(__hg_value_node_mem_pool, __hg_value_node_type_tree); hg_btree_allow_marking(__hg_value_node_type_tree, FALSE); __hg_value_node_is_initialized = TRUE; diff --git a/hieroglyph/version.h.in b/hieroglyph/version.h.in index 4ed8cd1..560975e 100644 --- a/hieroglyph/version.h.in +++ b/hieroglyph/version.h.in @@ -29,7 +29,7 @@ G_BEGIN_DECLS #define HIEROGLYPH_VERSION "@VERSION@" -#define HIEROGLYPH_UUID "0e700c3b-dbc6-4fa1-b04b-2f39427e1d19" +#define HIEROGLYPH_UUID "b4b5e745-6c80-4f4b-b1e2-35cc9fde754c" const char *__hg_rcsid G_GNUC_UNUSED = "$Rev$"; diff --git a/hieroglyph/vm.c b/hieroglyph/vm.c index bd0b2b5..b0dcb4e 100644 --- a/hieroglyph/vm.c +++ b/hieroglyph/vm.c @@ -77,11 +77,6 @@ struct _HieroGlyphVirtualMachine { gboolean shutdown; gint32 security_level; - /* job management */ - GList *saved_jobs; - GList *global_snapshot; - GList *local_snapshot; - /* memory pool */ HgAllocator *local_allocator; HgAllocator *global_allocator; @@ -182,7 +177,7 @@ _hg_vm_init_errorname(void) __hg_vm_err_node, \ #sym); \ __hg_vm_errorname[VM_e_##sym] = __hg_vm_err_node; \ - hg_mem_add_root_node(__hg_vm_mem_pool, __hg_vm_err_node); \ + hg_mem_pool_add_root_node(__hg_vm_mem_pool, __hg_vm_err_node); \ } G_STMT_END MAKE_ERRNAME(dictfull); @@ -222,14 +217,8 @@ _hg_vm_real_free(gpointer data) { HgVM *vm = data; - if (vm->saved_jobs) - g_list_free(vm->saved_jobs); if (vm->random_generator) g_rand_free(vm->random_generator); - if (vm->global_snapshot) - g_list_free(vm->global_snapshot); - if (vm->local_snapshot) - g_list_free(vm->local_snapshot); if (vm->local_pool) hg_mem_pool_destroy(vm->local_pool); #ifdef ENABLE_GLOBAL_POOL @@ -502,16 +491,11 @@ hg_vm_new(HgVMEmulationType type) hg_log_warning("Failed to create a name dict."); return NULL; } - hg_mem_add_root_node(retval->global_pool, retval->name_dict); + hg_mem_pool_add_root_node(retval->global_pool, retval->name_dict); g_get_current_time(&retval->initialized_time); retval->random_generator = g_rand_new(); - /* snapshots */ - retval->saved_jobs = NULL; - retval->global_snapshot = NULL; - retval->local_snapshot = NULL; - /* initialize the stacks */ retval->ostack = hg_stack_new(retval->local_pool, 500); retval->estack = hg_stack_new(retval->local_pool, 250); @@ -522,9 +506,9 @@ hg_vm_new(HgVMEmulationType type) hg_log_warning("Failed to create stacks."); return NULL; } - hg_mem_add_root_node(retval->local_pool, retval->ostack); - hg_mem_add_root_node(retval->local_pool, retval->estack); - hg_mem_add_root_node(retval->local_pool, retval->dstack); + hg_mem_pool_add_root_node(retval->local_pool, retval->ostack); + hg_mem_pool_add_root_node(retval->local_pool, retval->estack); + hg_mem_pool_add_root_node(retval->local_pool, retval->dstack); /* initialize local dictionaries */ retval->errordict = hg_dict_new(retval->local_pool, 128); @@ -540,11 +524,11 @@ hg_vm_new(HgVMEmulationType type) hg_log_warning("Failed to create local dictionaries."); return NULL; } - hg_mem_add_root_node(retval->local_pool, retval->errordict); - hg_mem_add_root_node(retval->local_pool, retval->error); - hg_mem_add_root_node(retval->local_pool, retval->statusdict); - hg_mem_add_root_node(retval->local_pool, retval->serverdict); - hg_mem_add_root_node(retval->local_pool, retval->font); + hg_mem_pool_add_root_node(retval->local_pool, retval->errordict); + hg_mem_pool_add_root_node(retval->local_pool, retval->error); + hg_mem_pool_add_root_node(retval->local_pool, retval->statusdict); + hg_mem_pool_add_root_node(retval->local_pool, retval->serverdict); + hg_mem_pool_add_root_node(retval->local_pool, retval->font); /* initialize global dictionaries */ retval->systemdict = hg_dict_new(retval->global_pool, 384); @@ -554,8 +538,8 @@ hg_vm_new(HgVMEmulationType type) hg_log_warning("Failed to create global dictionaries."); return NULL; } - hg_mem_add_root_node(retval->global_pool, retval->systemdict); - hg_mem_add_root_node(retval->global_pool, retval->globalfont); + hg_mem_pool_add_root_node(retval->global_pool, retval->systemdict); + hg_mem_pool_add_root_node(retval->global_pool, retval->globalfont); /* initialize file object */ retval->stdin = __hg_file_stdin; @@ -563,18 +547,18 @@ hg_vm_new(HgVMEmulationType type) retval->stderr = __hg_file_stderr; retval->lineeditor = hg_line_edit_new(retval->local_pool, NULL, retval->stdin, retval->stdout); - hg_mem_add_root_node(retval->local_pool, retval->lineeditor); + hg_mem_pool_add_root_node(retval->local_pool, retval->lineeditor); /* initialize graphics */ retval->graphics = hg_graphics_new(retval->graphic_pool); - hg_mem_add_root_node(retval->graphic_pool, retval->graphics); + hg_mem_pool_add_root_node(retval->graphic_pool, retval->graphics); /* plugin support */ retval->plugin_table = hg_dict_new(retval->local_pool, 256); retval->plugin_list = NULL; - hg_mem_add_root_node(retval->local_pool, retval->plugin_table); + hg_mem_pool_add_root_node(retval->local_pool, retval->plugin_table); - hg_mem_add_root_node(__hg_vm_mem_pool, retval); + hg_mem_pool_add_root_node(__hg_vm_mem_pool, retval); return retval; } @@ -894,17 +878,9 @@ hg_vm_unload_plugin(HgVM *vm, guint hg_vm_get_save_level(HgVM *vm) { - guint retval; - g_return_val_if_fail (vm != NULL, 0); - if (hg_vm_is_global_pool_used(vm)) { - retval = g_list_length(vm->global_snapshot) + g_list_length(vm->saved_jobs); - } else { - retval = g_list_length(vm->local_snapshot) + g_list_length(vm->saved_jobs); - } - - return retval; + return hg_mem_pool_get_n_snapshots(hg_vm_get_current_pool(vm)); } HgValueNode * @@ -996,37 +972,40 @@ hg_vm_startjob(HgVM *vm, gboolean encapsulated) { HgValueNode *node, *nkey; - GList *l; + HgMemSnapshot *snap; gboolean retval = TRUE; g_return_val_if_fail (vm != NULL, FALSE); - if (vm->saved_jobs) { - g_list_free(vm->saved_jobs); - } - if (g_list_length(vm->global_snapshot) > 0) { - l = g_list_last(vm->global_snapshot); - hg_mem_pool_restore_snapshot(vm->global_pool, l->data, 0); - vm->global_snapshot = g_list_delete_link(vm->global_snapshot, l); - } - if (g_list_length(vm->local_snapshot) > 0) { - l = g_list_last(vm->local_snapshot); - hg_mem_pool_restore_snapshot(vm->local_pool, l->data, 0); - vm->local_snapshot = g_list_delete_link(vm->local_snapshot, l); - } - hg_stack_clear(vm->ostack); hg_stack_clear(vm->dstack); hg_mem_garbage_collection(vm->global_pool); hg_mem_garbage_collection(vm->local_pool); + if (hg_mem_pool_get_n_snapshots(vm->global_pool) > 0) { + snap = hg_mem_pool_get_snapshot(vm->global_pool, 0); + hg_mem_pool_remove_root_node(vm->global_pool, snap); + if (!hg_mem_pool_restore_snapshot(vm->global_pool, snap, 0)) { + hg_log_warning("[BUG] failed to rollback the VM state."); + } + hg_mem_pool_clear_snapshot(vm->global_pool); + } + if (hg_mem_pool_get_n_snapshots(vm->local_pool) > 0) { + snap = hg_mem_pool_get_snapshot(vm->local_pool, 0); + hg_mem_pool_remove_root_node(vm->local_pool, snap); + if (!hg_mem_pool_restore_snapshot(vm->local_pool, snap, 0)) { + hg_log_warning("[BUG] failed to rollback the VM state."); + } + hg_mem_pool_clear_snapshot(vm->local_pool); + } + if (encapsulated) { HgMemSnapshot *gsnapshot = hg_mem_pool_save_snapshot(vm->global_pool); HgMemSnapshot *lsnapshot = hg_mem_pool_save_snapshot(vm->local_pool); - vm->global_snapshot = g_list_append(vm->global_snapshot, gsnapshot); - vm->local_snapshot = g_list_append(vm->local_snapshot, lsnapshot); + hg_mem_pool_add_root_node(vm->global_pool, gsnapshot); + hg_mem_pool_add_root_node(vm->local_pool, lsnapshot); } HG_VALUE_MAKE_DICT (node, vm->systemdict); diff --git a/plugins/debug/debug-main.c b/plugins/debug/debug-main.c index c7ce966..02f6c0d 100644 --- a/plugins/debug/debug-main.c +++ b/plugins/debug/debug-main.c @@ -41,7 +41,7 @@ hg_operator_build_operator__inline(_debug_op_, vm, pool, sdict, name, func, __hg_op); \ if (__hg_op != NULL) { \ __debug_operator_list[HG_debug_op_##func] = __hg_op; \ - hg_mem_add_root_node(pool, __hg_op); \ + hg_mem_pool_add_root_node(pool, __hg_op); \ } \ } G_STMT_END #define REMOVE_OP(pool, sdict, name, func) \ @@ -55,7 +55,7 @@ if (__hg_op == __debug_operator_list[HG_debug_op_##func]) { \ hg_dict_remove(sdict, __hg_key); \ } \ - hg_mem_remove_root_node(pool, __hg_op); \ + hg_mem_pool_remove_root_node(pool, __hg_op); \ hg_mem_free(__hg_op); \ } \ hg_mem_free(__hg_key); \ diff --git a/plugins/libedit/libedit-main.c b/plugins/libedit/libedit-main.c index 8a26cac..f3be90c 100644 --- a/plugins/libedit/libedit-main.c +++ b/plugins/libedit/libedit-main.c @@ -50,7 +50,7 @@ hg_operator_build_operator__inline(_libedit_op_, vm, pool, sdict, name, func, __hg_op); \ if (__hg_op != NULL) { \ __libedit_operator_list[HG_libedit_op_##func] = __hg_op; \ - hg_mem_add_root_node(pool, __hg_op); \ + hg_mem_pool_add_root_node(pool, __hg_op); \ } \ } G_STMT_END #define REMOVE_OP(pool, sdict, name, func) \ @@ -64,7 +64,7 @@ if (__hg_op == __libedit_operator_list[HG_libedit_op_##func]) { \ hg_dict_remove(sdict, __hg_key); \ } \ - hg_mem_remove_root_node(pool, __hg_op); \ + hg_mem_pool_remove_root_node(pool, __hg_op); \ hg_mem_free(__hg_op); \ } \ hg_mem_free(__hg_key); \ diff --git a/plugins/test/test-main.c b/plugins/test/test-main.c index 7284b74..a215975 100644 --- a/plugins/test/test-main.c +++ b/plugins/test/test-main.c @@ -45,7 +45,7 @@ hg_operator_build_operator__inline(_test_op_, vm, pool, sdict, name, func, __hg_op); \ if (__hg_op != NULL) { \ __test_operator_list[HG_test_op_##func] = __hg_op; \ - hg_mem_add_root_node(pool, __hg_op); \ + hg_mem_pool_add_root_node(pool, __hg_op); \ } \ } G_STMT_END #define REMOVE_OP(pool, sdict, name, func) \ @@ -59,7 +59,7 @@ if (__hg_op == __test_operator_list[HG_test_op_##func]) { \ hg_dict_remove(sdict, __hg_key); \ } \ - hg_mem_remove_root_node(pool, __hg_op); \ + hg_mem_pool_remove_root_node(pool, __hg_op); \ hg_mem_free(__hg_op); \ } \ hg_mem_free(__hg_key); \ |