void free_task_arg(struct task_arg* arg) { if(!arg) { return; } switch (arg->tt) { case MRB_TT_SYMBOL: case MRB_TT_STRING: free(arg->value.string.ptr); break; case MRB_TT_ARRAY: { for(int i=0; i<arg->value.array.len; i++) { free_task_arg(arg->value.array.ptr[i]); } free(arg->value.array.ptr); } break; default: break; } }
void free_task_arg(mrb_state *mrb, struct task_arg* arg) { if(!arg) { return; } switch (arg->tt) { case MRB_TT_SYMBOL: case MRB_TT_STRING: mrb_free(mrb, arg->value.string.ptr); break; case MRB_TT_ARRAY: { int i; for(i=0; i<arg->value.array.len; i++) { free_task_arg(mrb, arg->value.array.ptr[i]); } mrb_free(mrb, arg->value.array.ptr); } break; default: break; } }
void free_queue_task(struct queue_task* task) { task->refcount--; if(task->refcount < 1) { for(int i=0; i<task->args_len; ++i) { free_task_arg(task->args[i]); } free(task->args); free(task->result); free(task->name); free(task); } }
void free_queue_task(mrb_state *mrb, struct queue_task* task) { task->refcount--; if(task->refcount < 1) { int i; for(i=0; i<task->args_len; ++i) { free_task_arg(mrb, task->args[i]); } mrb_free(mrb, task->args); mrb_free(mrb, task->result); mrb_free(mrb, task->name); mrb_free(mrb, task); } }