feat(core/plan): 清理 effect 所持有的内存

This commit is contained in:
2026-04-27 00:20:43 +08:00
parent f3b8be8cf1
commit 46140e1e03

View File

@@ -1,16 +1,39 @@
#include "core/plan.h"
#include <stddef.h>
#include "base/array.h"
#include "base/memory.h"
static void free_memory_hold_by_effects(effect_t *effects, size_t count) {
for (size_t i = 0; i < count; ++i) {
auto effect = &effects[i];
switch (effect->type) {
case ZDWM_EFFECT_CHANGE_WINDOW_LIST:
p_delete(&effect->as.change_window_list.windows);
break;
case ZDWM_EFFECT_RESTACK_WINDOWS:
p_delete(&effect->as.restack_windows.windows);
break;
case ZDWM_EFFECT_BIND_KEY:
p_delete(&effect->as.bind_key.keys);
break;
default:
}
}
}
void plan_reset(plan_t *plan) {
if (!plan->effects || !plan->capacity) return;
free_memory_hold_by_effects(plan->effects, plan->count);
p_clear(plan->effects, plan->capacity);
plan->count = 0;
}
void plan_cleanup(plan_t *plan) {
free_memory_hold_by_effects(plan->effects, plan->count);
p_delete(&plan->effects);
plan->count = 0;
plan->capacity = 0;