summaryrefslogtreecommitdiff
path: root/proc
diff options
context:
space:
mode:
authorSergey Bugaev <bugaevc@gmail.com>2021-08-05 17:37:50 +0300
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2022-08-10 22:12:35 +0200
commita239719cd41e2c409366570f84639fa4a322c88b (patch)
treec58ab5fddb1494512c7d7605407889f6689c1327 /proc
parent111e1a54234613eb5055903cffa20d1f1e6a659e (diff)
proc: Use notify server implementation from libports
We can simply override proc_dead_name () to handle dead-name notifications.
Diffstat (limited to 'proc')
-rw-r--r--proc/Makefile9
-rw-r--r--proc/dead-name.c (renamed from proc/notify.c)59
-rw-r--r--proc/main.c4
-rw-r--r--proc/mig-mutate.h9
4 files changed, 10 insertions, 71 deletions
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/notify.c b/proc/dead-name.c
index 41a34112..7abe7094 100644
--- a/proc/notify.c
+++ b/proc/dead-name.c
@@ -20,74 +20,23 @@
/* Written by Michael I. Bushnell and Sergey Bugaev. */
-#include <mach.h>
-#include <sys/types.h>
-#include <hurd/hurd_types.h>
-#include <mach/notify.h>
-#include <stdio.h>
-#include <sys/wait.h>
-#include <signal.h>
-#include <errno.h>
-#include <stdlib.h>
+#include <hurd/ports.h>
#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)
+void
+ports_dead_name (void *notify, 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;
+ 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 \