From a239719cd41e2c409366570f84639fa4a322c88b Mon Sep 17 00:00:00 2001 From: Sergey Bugaev Date: Thu, 5 Aug 2021 17:37:50 +0300 Subject: proc: Use notify server implementation from libports We can simply override proc_dead_name () to handle dead-name notifications. --- proc/Makefile | 9 +++--- proc/dead-name.c | 42 +++++++++++++++++++++++++ proc/main.c | 4 +-- proc/mig-mutate.h | 9 ------ proc/notify.c | 93 ------------------------------------------------------- 5 files changed, 48 insertions(+), 109 deletions(-) create mode 100644 proc/dead-name.c delete mode 100644 proc/notify.c (limited to 'proc') diff --git a/proc/Makefile b/proc/Makefile index 8ca13c20..ba62a163 100644 --- a/proc/Makefile +++ b/proc/Makefile @@ -21,14 +21,13 @@ dir := proc makemode := server target = proc -SRCS = wait.c hash.c host.c info.c main.c mgt.c notify.c pgrp.c msg.c \ - cpu-types.c stubs.c +SRCS = wait.c hash.c host.c info.c main.c mgt.c pgrp.c msg.c \ + cpu-types.c stubs.c dead-name.c MIGSFLAGS = -imacros $(srcdir)/mig-mutate.h -MIGSTUBS = processServer.o notifyServer.o \ - ourmsgUser.o proc_excUser.o proc_excServer.o \ - task_notifyServer.o +MIGSTUBS = processServer.o task_notifyServer.o \ + ourmsgUser.o proc_excUser.o proc_excServer.o OBJS = $(SRCS:.c=.o) $(MIGSTUBS) HURDLIBS = ihash ports shouldbeinlibc LDLIBS = -lpthread diff --git a/proc/dead-name.c b/proc/dead-name.c new file mode 100644 index 00000000..7abe7094 --- /dev/null +++ b/proc/dead-name.c @@ -0,0 +1,42 @@ +/* Handle notifications + Copyright (C) 1992, 1993, 1994, 1996, 1999, 2021 + Free Software Foundation, Inc. + + This file is part of the GNU Hurd. + + The GNU Hurd is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + The GNU Hurd is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the GNU Hurd; see the file COPYING. If not, write to + the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +/* Written by Michael I. Bushnell and Sergey Bugaev. */ + + +#include +#include "proc.h" + +/* We ask for dead name notifications to detect when tasks and + message ports die. All notifications get sent to the notify + port. */ +void +ports_dead_name (void *notify, mach_port_t dead_name) +{ + struct proc *p; + + check_dead_execdata_notify (dead_name); + + p = task_find_nocreate (dead_name); + if (p) + process_has_exited (p); + + ports_interrupt_notified_rpcs (notify, dead_name, MACH_NOTIFY_DEAD_NAME); +} diff --git a/proc/main.c b/proc/main.c index bb0dad0f..eecb15e6 100644 --- a/proc/main.c +++ b/proc/main.c @@ -37,8 +37,8 @@ const char *argp_program_version = STANDARD_HURD_VERSION (proc); #include "process_S.h" -#include "notify_S.h" #include "../libports/interrupt_S.h" +#include "../libports/notify_S.h" #include "proc_exc_S.h" #include "task_notify_S.h" @@ -63,7 +63,7 @@ message_demuxer (mach_msg_header_t *inp, { mig_routine_t routine; if ((routine = process_server_routine (inp)) || - (routine = notify_server_routine (inp)) || + (routine = ports_notify_server_routine (inp)) || (routine = ports_interrupt_server_routine (inp)) || (routine = proc_exc_server_routine (inp)) || (routine = task_notify_server_routine (inp))) diff --git a/proc/mig-mutate.h b/proc/mig-mutate.h index 35b02418..b1da28d1 100644 --- a/proc/mig-mutate.h +++ b/proc/mig-mutate.h @@ -27,15 +27,6 @@ #define PROCESS_IMPORTS \ import "mig-decls.h"; -#define NOTIFY_INTRAN \ - port_info_t begin_using_port_info_port (mach_port_t) -#define NOTIFY_INTRAN_PAYLOAD \ - port_info_t begin_using_port_info_payload -#define NOTIFY_DESTRUCTOR \ - end_using_port_info (port_info_t) -#define NOTIFY_IMPORTS \ - import "libports/mig-decls.h"; - #define TASK_NOTIFY_INTRAN \ port_info_t begin_using_port_info_port (mach_port_t) #define TASK_NOTIFY_INTRAN_PAYLOAD \ diff --git a/proc/notify.c b/proc/notify.c deleted file mode 100644 index 41a34112..00000000 --- a/proc/notify.c +++ /dev/null @@ -1,93 +0,0 @@ -/* Handle notifications - Copyright (C) 1992, 1993, 1994, 1996, 1999, 2021 - Free Software Foundation, Inc. - - This file is part of the GNU Hurd. - - The GNU Hurd is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - The GNU Hurd is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with the GNU Hurd; see the file COPYING. If not, write to - the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ - -/* Written by Michael I. Bushnell and Sergey Bugaev. */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "proc.h" -#include "notify_S.h" - -/* We ask for dead name notifications to detect when tasks and - message ports die. All notifications get sent to the notify - port. */ -kern_return_t -do_mach_notify_dead_name (struct port_info *pi, - mach_port_t dead_name) -{ - struct proc *p; - - if (!pi || !ports_port_is_notify (pi)) - return EOPNOTSUPP; - - check_dead_execdata_notify (dead_name); - - p = task_find_nocreate (dead_name); - if (p) - process_has_exited (p); - - mach_port_deallocate (mach_task_self (), dead_name); - - return 0; -} - -/* We get no-senders notifications on exception ports that we - handle through proc_handle_exceptions. */ -kern_return_t -do_mach_notify_no_senders (struct port_info *pi, - mach_port_mscount_t mscount) -{ - return ports_do_mach_notify_no_senders (pi, mscount); -} - -kern_return_t -do_mach_notify_port_deleted (struct port_info *pi, - mach_port_t name) -{ - return 0; -} - -kern_return_t -do_mach_notify_msg_accepted (struct port_info *pi, - mach_port_t name) -{ - return 0; -} - -kern_return_t -do_mach_notify_port_destroyed (struct port_info *pi, - mach_port_t name) -{ - return 0; -} - -kern_return_t -do_mach_notify_send_once (struct port_info *pi) -{ - return 0; -} -- cgit v1.2.3