change names

This commit is contained in:
TXuian 2024-11-01 14:06:47 +08:00
parent 2f54409819
commit b586bd1247
8 changed files with 43 additions and 44 deletions

View File

@ -59,7 +59,7 @@ void sys_tracer_init()
// set sys_tracer resource identity
tracer_init_node(&sys_tracer.root_node, NULL, TRACER_OWNER, NULL);
sys_tracer.root_node.name = root_name;
sys_tracer.sys_tracer_tag.meta = &sys_tracer.root_node;
sys_tracer.sys_tracer_tag.inner_node = &sys_tracer.root_node;
// init memory allocator
slab_init(&sys_tracer.node_allocator, sizeof(TracerNode), "TracerNodeAllocator");
@ -68,7 +68,7 @@ void sys_tracer_init()
static char* parse_path(char* path, char* const name)
{
// skip extra '/'
// Skip extra '/'
while (*path == '/') {
path++;
}
@ -76,21 +76,19 @@ static char* parse_path(char* path, char* const name)
return NULL;
}
// start of current name
// Start of current name
char* cur_start = path;
while (*path != '/' && *path != '\0') {
path++;
}
// handle current name
int len = path - cur_start;
// Handle current name
size_t len = path - cur_start;
if (len >= TRACER_NODE_NAME_LEN) {
strncpy(name, cur_start, TRACER_NODE_NAME_LEN - 1);
name[TRACER_NODE_NAME_LEN - 1] = '\0';
} else {
strncpy(name, cur_start, len);
name[len] = '\0';
len = TRACER_NODE_NAME_LEN - 1;
}
memcpy(name, cur_start, len);
name[len] = '\0';
return path;
}
@ -122,40 +120,40 @@ bool AchieveResourceTag(TraceTag* target, TraceTag* owner, char* name)
{
static char name_buffer[TRACER_NODE_NAME_LEN];
TracerNode* inner_node = owner->meta;
TracerNode* inner_node = owner->inner_node;
assert(inner_node != NULL && inner_node->type == TRACER_OWNER);
while ((name = parse_path(name, name_buffer)) != NULL) {
if ((inner_node = tracer_find_node_onestep(inner_node, name_buffer)) == NULL) {
DEBUG("Tracer: No such object, owner: %s, child: %s\n", //
owner->meta->name == NULL ? "NULL" : owner->meta->name, name == NULL ? "NULL" : name_buffer);
owner->inner_node->name == NULL ? "NULL" : owner->inner_node->name, name == NULL ? "NULL" : name_buffer);
return false;
}
}
target->meta = inner_node;
target->inner_node = inner_node;
return true;
}
void* AchieveResource(TraceTag* tag)
{
assert(tag != NULL);
if (tag->meta == NULL || tag->meta->type == TRACER_OWNER) {
if (tag->inner_node == NULL || tag->inner_node->type == TRACER_OWNER) {
return NULL;
}
return tag->meta->p_resource;
return tag->inner_node->p_resource;
}
bool CreateResourceTag(TraceTag* new_tag, TraceTag* owner, char* name, tracemeta_ac_type type, void* p_resource)
{
assert(owner != NULL);
if (owner->meta == NULL) {
if (owner->inner_node == NULL) {
ERROR("Tracer: Empty owner, node name: %s\n", name);
return false;
}
// assert(owner->meta->type == TRACER_OWNER);
// assert(owner->inner_node->type == TRACER_OWNER);
if (type == TRACER_SERVER_IDENTITY_AC_RESOURCE && //
tracer_find_node_onestep(owner->meta, name) != NULL) {
tracer_find_node_onestep(owner->inner_node, name) != NULL) {
return false;
}
@ -167,11 +165,11 @@ bool CreateResourceTag(TraceTag* new_tag, TraceTag* owner, char* name, tracemeta
tracer_init_node(new_node, name, type, p_resource);
// new node add to owner's children list
doubleListAddOnHead(&new_node->list_node, &owner->meta->children_guard);
new_node->parent = owner->meta;
doubleListAddOnHead(&new_node->list_node, &owner->inner_node->children_guard);
new_node->parent = owner->inner_node;
if (new_tag != NULL) {
new_tag->meta = new_node;
new_tag->inner_node = new_node;
}
return true;
}
@ -179,30 +177,30 @@ bool CreateResourceTag(TraceTag* new_tag, TraceTag* owner, char* name, tracemeta
bool DeleteResource(TraceTag* target, TraceTag* owner)
{
assert(target != NULL && owner != NULL);
assert(owner->meta != NULL && owner->meta->type == TRACER_OWNER);
if (target->meta == NULL) {
ERROR("Tracer: Delete a empty resource, owner: %s\n", owner->meta->name);
assert(owner->inner_node != NULL && owner->inner_node->type == TRACER_OWNER);
if (target->inner_node == NULL) {
ERROR("Tracer: Delete a empty resource, owner: %s\n", owner->inner_node->name);
return false;
}
assert(target->meta->parent == owner->meta);
doubleListDel(&target->meta->list_node);
assert(target->inner_node->parent == owner->inner_node);
doubleListDel(&target->inner_node->list_node);
// delete name
if (target->meta->name != NULL) {
slab_free(&sys_tracer.node_name_allocator, target->meta->name);
if (target->inner_node->name != NULL) {
slab_free(&sys_tracer.node_name_allocator, target->inner_node->name);
}
// delete all children
if (target->meta->type == TRACER_OWNER) {
while (!IS_DOUBLE_LIST_EMPTY(&target->meta->children_guard)) {
if (target->inner_node->type == TRACER_OWNER) {
while (!IS_DOUBLE_LIST_EMPTY(&target->inner_node->children_guard)) {
TraceTag tmp_node = {
.meta = DOUBLE_LIST_ENTRY(target->meta->children_guard.next, TracerNode, list_node),
.inner_node = DOUBLE_LIST_ENTRY(target->inner_node->children_guard.next, TracerNode, list_node),
};
DeleteResource(&tmp_node, target);
}
}
slab_free(&sys_tracer.node_allocator, target->meta);
target->meta = NULL;
slab_free(&sys_tracer.node_allocator, target->inner_node);
target->inner_node = NULL;
return true;
}
@ -237,6 +235,6 @@ void debug_list_tracetree_inner(TracerNode* cur_node, int nr_blanks)
void debug_list_tracetree()
{
TracerNode* ref_root = RequireRootTag()->meta;
TracerNode* ref_root = RequireRootTag()->inner_node;
debug_list_tracetree_inner(ref_root, 0);
}

View File

@ -20,7 +20,8 @@ typedef struct TracerNode {
struct double_list_node children_guard;
} TracerNode;
/// @brief tag for other module to reference trace meta
/// @brief tag for other module to reference trace inner_node
typedef struct TraceTag {
TracerNode* meta;
TracerNode* inner_node;
uint32_t authority;
} TraceTag;

View File

@ -265,7 +265,7 @@ struct TopLevelPageDirectory kern_pgdir;
void load_kern_pgdir(struct TraceTag* mmu_driver_tag, struct TraceTag* intr_driver_tag)
{
if (mmu_driver_tag->meta == NULL) {
if (mmu_driver_tag->inner_node == NULL) {
ERROR("Invalid mmu driver tag.\n");
return;
}

View File

@ -69,7 +69,7 @@ int sys_connect_session(char* path, int capacity, struct Session* user_session)
if (!AchieveResourceTag(&server_identifier_owner, RequireRootTag(), "softkernel/server-identifier")) {
panic("Server identifier not initialized.\b");
}
assert(server_identifier_owner.meta != NULL);
assert(server_identifier_owner.inner_node != NULL);
struct TraceTag server_tag;
if (!AchieveResourceTag(&server_tag, &server_identifier_owner, path)) {

View File

@ -46,7 +46,7 @@ int sys_register_as_server(char* name)
if (!AchieveResourceTag(&server_identifier_set_tag, RequireRootTag(), "softkernel/server-identifier")) {
panic("Server identifier not initialized.\b");
}
assert(server_identifier_set_tag.meta != NULL);
assert(server_identifier_set_tag.inner_node != NULL);
// create server tag under server tag owner
if (!CreateResourceTag(&server->server_identifier, &server_identifier_set_tag, name, TRACER_SERVER_IDENTITY_AC_RESOURCE, server)) {

View File

@ -58,7 +58,7 @@ int sys_spawn(char* img_start, char* name, char** argv)
ERROR("Unable to new task control block %x.\n");
// error task allocation may free memspace before hand
// @todo use task ref map to handle this scene
if (NULL != pmemspace->tag.meta) {
if (NULL != pmemspace->tag.inner_node) {
free_memspace(pmemspace);
}

View File

@ -61,7 +61,7 @@ struct MemSpace* alloc_memspace(char* name)
slab_free(&xizi_task_manager.memspace_allocator, (void*)pmemspace);
return NULL;
}
assert(pmemspace->tag.meta != NULL);
assert(pmemspace->tag.inner_node != NULL);
if (!CreateResourceTag(&pmemspace->kernspace_mem_usage.tag, &pmemspace->tag, "MemUsage", TRACER_SYSOBJECT, (void*)&pmemspace->kernspace_mem_usage) || //
!CreateResourceTag(&pmemspace->userspace_mem_usage.tag, &pmemspace->tag, "UserMemUsage", TRACER_SYSOBJECT, (void*)&pmemspace->userspace_mem_usage) || //

View File

@ -157,11 +157,11 @@ static void _free_thread(struct Thread* task)
/// @todo handle server transition
/* delete server identifier */
if (task->server_identifier.meta != NULL) {
if (task->server_identifier.inner_node != NULL) {
// @todo figure out server-identifier ownership
struct TraceTag server_identifier_owner;
AchieveResourceTag(&server_identifier_owner, RequireRootTag(), "softkernel/server-identifier");
assert(server_identifier_owner.meta != NULL);
assert(server_identifier_owner.inner_node != NULL);
assert(DeleteResource(&task->server_identifier, &server_identifier_owner));
}
}
@ -286,7 +286,7 @@ static struct Thread* _new_thread(struct MemSpace* pmemspace)
queue_init(&task->sessions_in_handle);
queue_init(&task->sessions_to_be_handle);
/// server identifier
task->server_identifier.meta = NULL;
task->server_identifier.inner_node = NULL;
}
// [name]