From 6ba1d3cb540f8b1e3fadc26a008e330ddb29662b Mon Sep 17 00:00:00 2001 From: paladin-t Date: Mon, 21 Dec 2015 15:51:01 +0800 Subject: [PATCH] *fixed a class gc bug. --- HISTORY | 3 +++ core/my_basic.c | 5 +++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/HISTORY b/HISTORY index 648afcc..2da2495 100755 --- a/HISTORY +++ b/HISTORY @@ -1,3 +1,6 @@ +Dec. 21 2015 +Fixed a class GC bug + Dec. 19 2015 Improved error handling when defining a class in C diff --git a/core/my_basic.c b/core/my_basic.c index 15313d6..5a31029 100755 --- a/core/my_basic.c +++ b/core/my_basic.c @@ -4482,10 +4482,11 @@ int _gc_destroy_garbage(void* data, void* extra) { instance = (_class_t*)data; _HT_FOREACH(instance->scope->var_dict, _do_nothing_on_object, _gc_destroy_garbage_in_class, gc); _ht_clear(instance->scope->var_dict); + _ls_clear(instance->meta_list); break; #endif /* MB_ENABLE_CLASS */ - default: + default: /* Do nothing */ break; } if(ref->count) { @@ -5483,7 +5484,6 @@ void _unref_class(_ref_t* ref, void* data) { void _destroy_class(_class_t* c) { /* Destroy a class instance */ - safe_free(c->name); if(c->meta_list) { _unlink_meta_class(c->ref.s, c); _ls_destroy(c->meta_list); @@ -5494,6 +5494,7 @@ void _destroy_class(_class_t* c) { } safe_free(c->scope); _destroy_ref(&c->ref); + safe_free(c->name); safe_free(c); }