ANN void vm_unlock(VM const*);
ANN m_bool vm_running(VM const*);
ANN void free_vm(VM* vm);
+ANN void vm_ini_shred(const VM* vm, const VM_Shred shred)__attribute__((hot));
ANN void vm_add_shred(const VM* vm, const VM_Shred shred)__attribute__((hot));
ANN void vm_remove(const VM* vm, const m_uint index)__attribute__((hot));
ANN m_str code_name_set(MemPool p, const m_str, const m_str);
}
ANN static void gwion_cleaner(const Gwion gwion) {
- if(!gwion->type[et_shred])
- return;
const VM_Code code = new_vm_code(gwion->mp, NULL, 0, ae_flag_builtin, "in code dtor");
gwion->vm->cleaner_shred = new_vm_shred(gwion->mp, code);
- vm_add_shred(gwion->vm, gwion->vm->cleaner_shred);
+ vm_ini_shred(gwion->vm, gwion->vm->cleaner_shred);
}
ANN VM* gwion_cpy(const VM* src) {
gwion->data->plug = new_pluginfo(gwion->mp, &arg->lib);
shreduler_set_loop(gwion->vm->shreduler, arg->loop);
if(gwion_audio(gwion) > 0 && gwion_engine(gwion)) {
+ gwion_cleaner(gwion);
plug_run(gwion, &arg->mod);
gwion_compile(gwion, &arg->add);
return GW_OK;
}
ANN void gwion_end(const Gwion gwion) {
- gwion_cleaner(gwion);
gwion_end_child(gwion->vm->cleaner_shred, gwion);
free_env(gwion->env);
if(gwion->vm->cleaner_shred)