+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
|
May. 14 2017
|
||||||
Added a clear_parser parameter to the mb_run function
|
Added a clear_parser parameter to the mb_run function
|
||||||
Added an extra end of running checking after stepped
|
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* collected_table;
|
||||||
_ht_node_t* valid_table;
|
_ht_node_t* valid_table;
|
||||||
unsigned char collecting;
|
unsigned char collecting;
|
||||||
|
bool_t enabled_collecting;
|
||||||
} _gc_t;
|
} _gc_t;
|
||||||
|
|
||||||
typedef struct _calculation_operator_info_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;
|
gc = &s->gc;
|
||||||
|
|
||||||
|
/* Check whether it's paused */
|
||||||
|
if(!gc->enabled_collecting)
|
||||||
|
return;
|
||||||
|
|
||||||
/* Avoid infinity loop */
|
/* Avoid infinity loop */
|
||||||
if(gc->collecting)
|
if(gc->collecting)
|
||||||
return;
|
return;
|
||||||
@ -11300,6 +11305,7 @@ int mb_close(struct mb_interpreter_t** s) {
|
|||||||
_tidy_scope_chain(*s);
|
_tidy_scope_chain(*s);
|
||||||
_dispose_scope_chain(*s);
|
_dispose_scope_chain(*s);
|
||||||
|
|
||||||
|
(*s)->gc.enabled_collecting = true;
|
||||||
_gc_collect_garbage(*s, -1);
|
_gc_collect_garbage(*s, -1);
|
||||||
_ht_destroy((*s)->gc.table);
|
_ht_destroy((*s)->gc.table);
|
||||||
_ht_destroy((*s)->gc.recursive_table);
|
_ht_destroy((*s)->gc.recursive_table);
|
||||||
@ -13610,6 +13616,22 @@ _exit:
|
|||||||
return result;
|
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 */
|
/* Trigger GC */
|
||||||
int mb_gc(struct mb_interpreter_t* s, int_t* collected) {
|
int mb_gc(struct mb_interpreter_t* s, int_t* collected) {
|
||||||
int_t diff = 0;
|
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_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 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_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_get_userdata(struct mb_interpreter_t* s, void** d);
|
||||||
MBAPI int mb_set_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