summaryrefslogtreecommitdiff
path: root/proc/notify.c
diff options
context:
space:
mode:
authorMichael I. Bushnell <mib@gnu.org>1994-03-22 18:36:52 +0000
committerMichael I. Bushnell <mib@gnu.org>1994-03-22 18:36:52 +0000
commita2e14dc11cdd72f366a0e0058375ab5a34bc15af (patch)
treea6e9e84032a8d25715c1981f5baa32b291939247 /proc/notify.c
parente6516d3d37826282d434bfd455722c507e7cd417 (diff)
Initial revision
Diffstat (limited to 'proc/notify.c')
-rw-r--r--proc/notify.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/proc/notify.c b/proc/notify.c
new file mode 100644
index 00000000..664abe9e
--- /dev/null
+++ b/proc/notify.c
@@ -0,0 +1,58 @@
+/* Handle notifications
+ Copyright (C) 1992, 1993, 1994 Free Software Foundation
+
+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. */
+
+#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 "proc.h"
+#include "notify_S.h"
+
+/* We ask for dead name notifications to detect when tasks and
+ message ports die. Both notifications get sent to the process
+ port. */
+error_t
+do_mach_notify_dead_name (mach_port_t notify,
+ mach_port_t deadport)
+{
+ struct proc *p = reqport_find (notify);
+
+ if (!p)
+ return EOPNOTSUPP;
+
+ if (p->p_reqport == deadport)
+ {
+ message_port_dead (p);
+ return 0;
+ }
+ else if (p->p_task == deadport)
+ {
+ process_has_exited (p);
+ return 0;
+ }
+ else
+ return EINVAL;
+}