From: Matthias Kruk Date: Mon, 25 Nov 2019 05:39:53 +0000 (+0900) Subject: Add process_task_foreach() function X-Git-Url: https://git.corax.cc/?a=commitdiff_plain;h=b0432b85097a460eff0dea644991d69680c0daf3;p=corax Add process_task_foreach() function --- diff --git a/kernel/core/process.c b/kernel/core/process.c index cef5ba9..784a7a5 100644 --- a/kernel/core/process.c +++ b/kernel/core/process.c @@ -963,3 +963,34 @@ int process_get_pagedir(process_t *proc, pg_dir_t **pd) return(ret_val); } + +int process_task_foreach(process_t *proc, int (*func)(process_t*, task_t*, void*), void *data) +{ + int ret_val; + + ret_val = -EINVAL; + + if(proc && func) { + int i; + + /* FIXME: Lock process */ + + for(i = 0; i < CONFIG_PROC_MAXTASKS; i++) { + task_t *t = proc->p_tasks[i]; + + if(t) { + task_lock(t); + ret_val = func(proc, t, data); + task_unlock(t); + + if(ret_val < 0) { + break; + } + } + } + + /* FIXME: Unlock process */ + } + + return(ret_val); +} diff --git a/kernel/include/process.h b/kernel/include/process.h index 2a3671a..b3a8a96 100644 --- a/kernel/include/process.h +++ b/kernel/include/process.h @@ -52,6 +52,7 @@ int process_detach(process_t*); int process_suspend(process_t*); int process_setuid(process_t*, uid_t); int process_setgid(process_t*, gid_t); +int process_task_foreach(process_t*, int(*)(process_t*, task_t*, void*), void*); int process_set_pagedir(process_t*, pg_dir_t*); int process_get_pagedir(process_t*, pg_dir_t**);