]> git.corax.cc Git - corax/commitdiff
Add process_task_foreach() function
authorMatthias Kruk <m@m10k.eu>
Mon, 25 Nov 2019 05:39:53 +0000 (14:39 +0900)
committerMatthias Kruk <m@m10k.eu>
Mon, 25 Nov 2019 05:39:53 +0000 (14:39 +0900)
kernel/core/process.c
kernel/include/process.h

index cef5ba9ce194cd2cfa1f01592f9296ed5e0490c4..784a7a5ab69cceb6cf321288c6d4e7d2c553ed2d 100644 (file)
@@ -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);
+}
index 2a3671a94bf604f09b532f72ed03413e6b6f3d4f..b3a8a966eaacda6010e3f49ec15bae1444e623e1 100644 (file)
@@ -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**);