From f8446018b1b236d95f7a6faa35308e5b424324b2 Mon Sep 17 00:00:00 2001 From: Wang Renxin Date: Tue, 27 Oct 2015 13:12:29 +0800 Subject: [PATCH] *fixed a collection referencing by iterator bug during gc. --- core/my_basic.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/core/my_basic.c b/core/my_basic.c index 9db923e..326e8c8 100755 --- a/core/my_basic.c +++ b/core/my_basic.c @@ -3932,6 +3932,20 @@ int _gc_add_reachable(void* data, void* extra, _ht_node_t* ht) { _HT_FOREACH(obj->data.dict->dict, _do_nothing_on_object, _gc_add_reachable, ht); } + break; + case _DT_LIST_IT: + if(!_ht_find(ht, &obj->data.list_it->list->ref)) { + _ht_set_or_insert(ht, &obj->data.list_it->list->ref, obj->data.list_it->list); + _LS_FOREACH(obj->data.list_it->list->list, _do_nothing_on_object, _gc_add_reachable, ht); + } + + break; + case _DT_DICT_IT: + if(!_ht_find(ht, &obj->data.dict_it->dict->ref)) { + _ht_set_or_insert(ht, &obj->data.dict_it->dict->ref, obj->data.dict_it->dict); + _HT_FOREACH(obj->data.dict_it->dict->dict, _do_nothing_on_object, _gc_add_reachable, ht); + } + break; #endif /* MB_ENABLE_COLLECTION_LIB */ default: /* Do nothing */