+added mb_get_gc_enabled and mb_set_gc_enabled functions.
This commit is contained in:
parent
c855bea20c
commit
3ba4fdec26
3
HISTORY
3
HISTORY
@ -1,3 +1,6 @@
|
||||
May. 15 2017
|
||||
Added mb_get_gc_enabled and mb_set_gc_enabled functions
|
||||
|
||||
May. 14 2017
|
||||
Added a clear_parser parameter to the mb_run function
|
||||
Added an extra end of running checking after stepped
|
||||
|
Binary file not shown.
@ -393,6 +393,7 @@ typedef struct _gc_t {
|
||||
_ht_node_t* collected_table;
|
||||
_ht_node_t* valid_table;
|
||||
unsigned char collecting;
|
||||
bool_t enabled_collecting;
|
||||
} _gc_t;
|
||||
|
||||
typedef struct _calculation_operator_info_t {
|
||||
@ -6543,6 +6544,10 @@ static void _gc_collect_garbage(mb_interpreter_t* s, int depth) {
|
||||
|
||||
gc = &s->gc;
|
||||
|
||||
/* Check whether it's paused */
|
||||
if(!gc->enabled_collecting)
|
||||
return;
|
||||
|
||||
/* Avoid infinity loop */
|
||||
if(gc->collecting)
|
||||
return;
|
||||
@ -11300,6 +11305,7 @@ int mb_close(struct mb_interpreter_t** s) {
|
||||
_tidy_scope_chain(*s);
|
||||
_dispose_scope_chain(*s);
|
||||
|
||||
(*s)->gc.enabled_collecting = true;
|
||||
_gc_collect_garbage(*s, -1);
|
||||
_ht_destroy((*s)->gc.table);
|
||||
_ht_destroy((*s)->gc.recursive_table);
|
||||
@ -13610,6 +13616,22 @@ _exit:
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Get whether GC is enabled */
|
||||
bool_t mb_get_gc_enabled(struct mb_interpreter_t* s) {
|
||||
if(!s) return false;
|
||||
|
||||
return s->gc.enabled_collecting;
|
||||
}
|
||||
|
||||
/* Sets whether GC is enabled */
|
||||
int mb_set_gc_enabled(struct mb_interpreter_t* s, bool_t gc) {
|
||||
if(!s) return MB_FUNC_ERR;
|
||||
|
||||
s->gc.enabled_collecting = gc;
|
||||
|
||||
return MB_FUNC_OK;
|
||||
}
|
||||
|
||||
/* Trigger GC */
|
||||
int mb_gc(struct mb_interpreter_t* s, int_t* collected) {
|
||||
int_t diff = 0;
|
||||
|
@ -667,6 +667,8 @@ MBAPI int mb_set_error_handler(struct mb_interpreter_t* s, mb_error_handler_t h)
|
||||
MBAPI int mb_set_printer(struct mb_interpreter_t* s, mb_print_func_t p);
|
||||
MBAPI int mb_set_inputer(struct mb_interpreter_t* s, mb_input_func_t p);
|
||||
|
||||
MBAPI bool_t mb_get_gc_enabled(struct mb_interpreter_t* s);
|
||||
MBAPI int mb_set_gc_enabled(struct mb_interpreter_t* s, bool_t gc);
|
||||
MBAPI int mb_gc(struct mb_interpreter_t* s, int_t* collected/* = NULL*/);
|
||||
MBAPI int mb_get_userdata(struct mb_interpreter_t* s, void** d);
|
||||
MBAPI int mb_set_userdata(struct mb_interpreter_t* s, void* d);
|
||||
|
Loading…
x
Reference in New Issue
Block a user