diff options
Diffstat (limited to 'libpager/no-senders.c')
-rw-r--r-- | libpager/no-senders.c | 49 |
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); -} |