summaryrefslogtreecommitdiff
path: root/proc/mgt.c
diff options
context:
space:
mode:
Diffstat (limited to 'proc/mgt.c')
-rw-r--r--proc/mgt.c35
1 files changed, 34 insertions, 1 deletions
diff --git a/proc/mgt.c b/proc/mgt.c
index 02d69db4..32408ae9 100644
--- a/proc/mgt.c
+++ b/proc/mgt.c
@@ -1,5 +1,5 @@
/* Process management
- Copyright (C) 1992,93,94,95,96,99,2000,01,02,13
+ Copyright (C) 1992,93,94,95,96,99,2000,01,02,13,14
Free Software Foundation, Inc.
This file is part of the GNU Hurd.
@@ -981,3 +981,36 @@ S_proc_get_code (struct proc *callerp,
return 0;
}
+
+/* Handle new task notifications from the kernel. */
+error_t
+S_mach_notify_new_task (mach_port_t notify,
+ mach_port_t task,
+ mach_port_t parent)
+{
+ struct proc *parentp, *childp;
+
+ if (notify != generic_port)
+ return EOPNOTSUPP;
+
+ parentp = task_find_nocreate (parent);
+ if (! parentp)
+ {
+ mach_port_deallocate (mach_task_self (), task);
+ mach_port_deallocate (mach_task_self (), parent);
+ return ESRCH;
+ }
+
+ childp = task_find_nocreate (task);
+ if (! childp)
+ {
+ mach_port_mod_refs (mach_task_self (), task, MACH_PORT_RIGHT_SEND, +1);
+ childp = new_proc (task);
+ }
+
+ /* XXX do something interesting */
+
+ mach_port_deallocate (mach_task_self (), task);
+ mach_port_deallocate (mach_task_self (), parent);
+ return 0;
+}