summaryrefslogtreecommitdiff
path: root/libpager/no-senders.c
diff options
context:
space:
mode:
authorMichael I. Bushnell <mib@gnu.org>1995-06-20 17:04:11 +0000
committerMichael I. Bushnell <mib@gnu.org>1995-06-20 17:04:11 +0000
commitd69171b495130395a02445beace090fc041aa299 (patch)
tree6ec3a7f77cde52fd017d6f645faf48871c63b832 /libpager/no-senders.c
parent19981914763da9d9045634cbe021625ca0323061 (diff)
Rename pager_no_senders to _pager_do_seqnos_mach_notify_no_senders.
Lookup up port right ourselves. Remove function pager_clean (now in clean.c).
Diffstat (limited to 'libpager/no-senders.c')
-rw-r--r--libpager/no-senders.c49
1 files changed, 12 insertions, 37 deletions
diff --git a/libpager/no-senders.c b/libpager/no-senders.c
index 0853c0f9..f9f3b6ab 100644
--- a/libpager/no-senders.c
+++ b/libpager/no-senders.c
@@ -1,5 +1,5 @@
/* Called when a nosenders notification happens
- Copyright (C) 1994 Free Software Foundation
+ Copyright (C) 1994, 1995 Free Software Foundation
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
@@ -20,49 +20,24 @@
#include <stdio.h>
#include <mach/notify.h>
-/* The libpager library user must call this (and do nothing else) when
- a no-senders notification is received for a pager port. P is pager
- on for which the notification was received; SEQNO and MSCOUNT are
- from the no-senders notification as described in <mach/notify.defs>. */
-void
-pager_no_senders (struct pager *p,
- mach_port_seqno_t seqno,
- mach_port_mscount_t mscount)
+error_t
+_pager_do_seqnos_mach_notify_no_senders (mach_port_t notify,
+ mach_port_seqno_t seqno,
+ mach_port_mscount_t mscount)
{
+ struct pager *p = ports_lookup_port (0, notify, _pager_class);
+
+ if (!p)
+ return EOPNOTSUPP;
+
mutex_lock (&p->interlock);
_pager_wait_for_seqno (p, seqno);
_pager_release_seqno (p, seqno);
mutex_unlock (&p->interlock);
ports_no_senders (p, mscount);
+
+ ports_port_deref (p);
}
-/* Called by port management routines when the last send-right
- to a pager has gone away. This is a dual of pager_create. */
-void
-pager_clean (void *arg)
-{
- struct pager *p = arg;
-#ifdef KERNEL_INIT_RACE
- struct pending_init *i, *tmp;
-#endif
-
- if (p->pager_state != NOTINIT)
- {
- mutex_lock (&p->interlock);
- _pager_free_structure (p);
-#ifdef KERNEL_INIT_RACE
- for (i = p->init_head; i; i = tmp)
- {
- mach_port_deallocate (mach_task_self (), i->control);
- mach_port_deallocate (mach_task_self (), i->name);
- tmp = i->next;
- free (i);
- }
-#endif
- mutex_unlock (&p->interlock);
- }
-
- pager_clear_user_data (p->upi);
-}