Justus Winter, le Thu 13 Nov 2014 13:26:16 +0100, a écrit : > * 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.
Ack. > --- > 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.1 > -- Samuel Who wants to remember that escape-x-alt-control-left shift-b puts you into super-edit-debug-compile mode? (Discussion in comp.os.linux.misc on the intuitiveness of commands, especially Emacs.)