[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH hurd 2/5] proc: register for new task notifications
From: |
Samuel Thibault |
Subject: |
Re: [PATCH hurd 2/5] proc: register for new task notifications |
Date: |
Wed, 10 Dec 2014 01:42:09 +0100 |
User-agent: |
Mutt/1.5.21+34 (58baf7c9f32f) (2010-12-30) |
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.)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [PATCH hurd 2/5] proc: register for new task notifications,
Samuel Thibault <=