diff options
Diffstat (limited to 'debian/patches/0002-proc-register-for-new-task-notifications.patch')
| -rw-r--r-- | debian/patches/0002-proc-register-for-new-task-notifications.patch | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/debian/patches/0002-proc-register-for-new-task-notifications.patch b/debian/patches/0002-proc-register-for-new-task-notifications.patch new file mode 100644 index 00000000..f982e448 --- /dev/null +++ b/debian/patches/0002-proc-register-for-new-task-notifications.patch @@ -0,0 +1,126 @@ +From df3730a2eb4da4687dd76ad8668808af247db903 Mon Sep 17 00:00:00 2001 +From: Justus Winter <4winter@informatik.uni-hamburg.de> +Date: Mon, 16 Sep 2013 16:09:05 +0200 +Subject: [PATCH hurd 2/5] proc: register for new task notifications + +* proc/Makefile (MIGSTUBS): Add `gnumachServer.o'. +* proc/main.c (message_demuxer): Handle the `task_notify' protocol. +(main): Register for new task notificatinos. +* proc/mgt.c (S_mach_notify_new_task): Add server function. +--- + proc/Makefile | 4 +++- + proc/main.c | 11 ++++++++++- + proc/mgt.c | 35 ++++++++++++++++++++++++++++++++++- + 3 files changed, 47 insertions(+), 3 deletions(-) + +diff --git a/proc/Makefile b/proc/Makefile +index aa31ffb..2275a66 100644 +--- a/proc/Makefile ++++ b/proc/Makefile +@@ -27,9 +27,11 @@ SRCS = wait.c hash.c host.c info.c main.c mgt.c notify.c pgrp.c msg.c \ + MIGSFLAGS = -imacros $(srcdir)/mig-mutate.h + + MIGSTUBS = processServer.o notifyServer.o \ +- ourmsgUser.o proc_excUser.o proc_excServer.o ++ ourmsgUser.o proc_excUser.o proc_excServer.o \ ++ task_notifyServer.o + OBJS = $(SRCS:.c=.o) $(MIGSTUBS) + HURDLIBS = ihash ports shouldbeinlibc ++ + OTHERLIBS = -lpthread + + include ../Makeconf +diff --git a/proc/main.c b/proc/main.c +index 3419d44..b4288fb 100644 +--- a/proc/main.c ++++ b/proc/main.c +@@ -31,6 +31,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + #include <pids.h> + + #include "proc.h" ++#include "gnumach_U.h" + + const char *argp_program_version = STANDARD_HURD_VERSION (proc); + +@@ -38,6 +39,7 @@ const char *argp_program_version = STANDARD_HURD_VERSION (proc); + #include "notify_S.h" + #include "../libports/interrupt_S.h" + #include "proc_exc_S.h" ++#include "task_notify_S.h" + + int + message_demuxer (mach_msg_header_t *inp, +@@ -47,7 +49,8 @@ message_demuxer (mach_msg_header_t *inp, + if ((routine = process_server_routine (inp)) || + (routine = notify_server_routine (inp)) || + (routine = ports_interrupt_server_routine (inp)) || +- (routine = proc_exc_server_routine (inp))) ++ (routine = proc_exc_server_routine (inp)) || ++ (routine = task_notify_server_routine (inp))) + { + pthread_mutex_lock (&global_lock); + (*routine) (inp, outp); +@@ -152,6 +155,12 @@ main (int argc, char **argv, char **envp) + if (err) + error (0, err, "Increasing priority failed"); + ++ err = register_new_task_notification (_hurd_host_priv, ++ generic_port, ++ MACH_MSG_TYPE_MAKE_SEND); ++ if (err) ++ error (0, err, "Registering task notifications failed"); ++ + { + /* Get our stderr set up to print on the console, in case we have + to panic or something. */ +diff --git a/proc/mgt.c b/proc/mgt.c +index 02d69db..32408ae 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; ++} +-- +2.1.3 + |
