core: runtime 接管用户配置模块句柄

This commit is contained in:
2026-03-24 02:42:23 +08:00
parent 3e09dec613
commit eb376e51b7
5 changed files with 73 additions and 20 deletions

View File

@@ -1,6 +1,6 @@
#include "core/runtime.h"
#include <stddef.h>
#include <dlfcn.h>
#include "base/memory.h"
#include "core/backend.h"
@@ -36,35 +36,22 @@ static bool runtime_init_desc_valid(const runtime_init_desc_t *desc) {
return true;
}
static void runtime_workspace_desc_list_cleanup(workspace_desc_t **list,
size_t *count) {
if (!list || !count) return;
for (size_t i = 0; i < *count; i++) {
workspace_desc_t *workspace = &(*list)[i];
p_delete(&workspace->name);
p_delete(&workspace->layout_ids);
}
p_delete(list);
*count = 0;
}
bool runtime_init(runtime_t *runtime, runtime_init_desc_t *desc) {
if (!runtime || !runtime_init_desc_valid(desc)) return false;
p_clear(runtime, 1);
runtime->backend = desc->backend;
runtime->layouts = desc->layouts;
runtime->config_module_handle = desc->config_module_handle;
desc->backend = nullptr;
p_clear(&desc->layouts, 1);
desc->config_module_handle = nullptr;
state_init(&runtime->state, desc->outputs, desc->output_count,
desc->workspaces, desc->workspace_count);
runtime_workspace_desc_list_cleanup(&desc->workspaces,
&desc->workspace_count);
workspace_desc_list_cleanup(&desc->workspaces, &desc->workspace_count);
desc->outputs = nullptr;
desc->output_count = 0;
@@ -84,10 +71,11 @@ void runtime_init_desc_cleanup(runtime_init_desc_t *desc) {
layout_registry_cleanup(&desc->layouts);
}
runtime_workspace_desc_list_cleanup(&desc->workspaces,
&desc->workspace_count);
workspace_desc_list_cleanup(&desc->workspaces, &desc->workspace_count);
desc->outputs = nullptr;
desc->output_count = 0;
if (desc->config_module_handle) dlclose(desc->config_module_handle);
desc->config_module_handle = nullptr;
}
void runtime_shutdown(runtime_t *runtime) {
@@ -99,4 +87,6 @@ void runtime_shutdown(runtime_t *runtime) {
state_cleanup(&runtime->state);
backend_destroy(runtime->backend);
runtime->backend = nullptr;
if (runtime->config_module_handle) dlclose(runtime->config_module_handle);
runtime->config_module_handle = nullptr;
}

View File

@@ -1,5 +1,7 @@
#pragma once
#include <stddef.h>
#include "core/backend.h"
#include "core/layout.h"
#include "core/state.h"
@@ -12,6 +14,7 @@ typedef struct runtime_init_desc_t {
layout_registry_t layouts;
workspace_desc_t *workspaces;
size_t workspace_count;
void *config_module_handle;
} runtime_init_desc_t;
typedef struct runtime_t {
@@ -21,6 +24,7 @@ typedef struct runtime_t {
state_t state;
layout_registry_t layouts;
backend_t *backend;
void *config_module_handle;
} runtime_t;
bool runtime_init(runtime_t *runtime, runtime_init_desc_t *desc);

View File

@@ -2,6 +2,7 @@
#include <stddef.h>
#include "base/memory.h"
#include "core/types.h"
/*
@@ -32,6 +33,28 @@ typedef struct workspace_desc_t {
layout_id_t initial_layout_id;
} workspace_desc_t;
static inline void workspace_desc_cleanup(workspace_desc_t *workspace) {
if (!workspace) return;
p_delete(&workspace->name);
p_delete(&workspace->layout_ids);
workspace->output_index = 0;
workspace->layout_count = 0;
workspace->initial_layout_id = ZDWM_LAYOUT_ID_INVALID;
}
static inline void workspace_desc_list_cleanup(workspace_desc_t **list,
size_t *count) {
if (!list || !count) return;
for (size_t i = 0; i < *count; i++) {
workspace_desc_cleanup(&(*list)[i]);
}
p_delete(list);
*count = 0;
}
/*
* workspace 描述校验接口。
*