diff --git a/port/linux/generate_stack_usage_report.py b/port/linux/generate_stack_usage_report.py index 6bf05db46..098afbb9d 100644 --- a/port/linux/generate_stack_usage_report.py +++ b/port/linux/generate_stack_usage_report.py @@ -47,3 +47,5 @@ def generate_report(stack_usage_data): if __name__ == "__main__": stack_usage_data = collect_stack_usage_info() report = generate_report(stack_usage_data) + with open("stack_usage_report.txt", "w") as f: + f.write(report) diff --git a/src/PikaVM.c b/src/PikaVM.c index 8f37d499d..bcd81777b 100644 --- a/src/PikaVM.c +++ b/src/PikaVM.c @@ -1398,22 +1398,22 @@ static int _get_n_input_with_unpack(VMState* vm, int n_used) { } #define vars_or_keys_or_default (f.is_vars || f.is_keys || f.is_default) +#define METHOD_TYPE_LIST_MAX_LEN PIKA_LINE_BUFF_SIZE static int VMState_loadArgsFromMethodArg(VMState* vm, PikaObj* method_host_obj, Args* locals, Arg* method_arg, char* method_name, int n_used) { - Arg* argv[PIKA_ARG_NUM_MAX] = {0}; int argc = 0; - char _buffs1[PIKA_LINE_BUFF_SIZE] = {0}; - char* buffs1 = (char*)_buffs1; - char _buffs2[PIKA_LINE_BUFF_SIZE] = {0}; - char* buffs2 = (char*)_buffs2; + Arg** argv = (Arg**)pikaMalloc(sizeof(Arg*) * PIKA_ARG_NUM_MAX); + char* buffs1 = (char*)pikaMalloc(METHOD_TYPE_LIST_MAX_LEN); + char* buffs2 = (char*)pikaMalloc(METHOD_TYPE_LIST_MAX_LEN); FunctionArgsInfo f = {0}; char* type_list_buff = NULL; /* get method type list */ - f.type_list = methodArg_getTypeList(method_arg, buffs1, sizeof(_buffs1)); + f.type_list = + methodArg_getTypeList(method_arg, buffs1, METHOD_TYPE_LIST_MAX_LEN); if (NULL == f.type_list) { pika_platform_printf( "OverflowError: type list is too long, please use bigger " @@ -1494,7 +1494,7 @@ static int VMState_loadArgsFromMethodArg(VMState* vm, /* create tuple/dict for vars/keys */ if (vars_or_keys_or_default) { - if (strGetSize(f.type_list) > sizeof(_buffs2)) { + if (strGetSize(f.type_list) > METHOD_TYPE_LIST_MAX_LEN) { pika_platform_printf( "OverFlowError: please use bigger PIKA_LINE_BUFF_SIZE\r\n"); while (1) { @@ -1581,6 +1581,9 @@ static int VMState_loadArgsFromMethodArg(VMState* vm, } _loadLocalsFromArgv(locals, argc, argv); exit: + pikaFree(buffs1, METHOD_TYPE_LIST_MAX_LEN); + pikaFree(buffs2, METHOD_TYPE_LIST_MAX_LEN); + pikaFree(argv, sizeof(Arg*) * PIKA_ARG_NUM_MAX); return f.n_arg; } @@ -4128,7 +4131,7 @@ PikaObj* pikaVM_runFile(PikaObj* self, char* file_name) { void _pikaVM_yield(void) { #if PIKA_EVENT_ENABLE - if(!g_PikaVMSignal.event_thread_inited) { + if (!g_PikaVMSignal.event_thread_inited) { _VMEvent_pickupEvent(); } #endif