diff options
author | Sergio Lopez <koro@sinrega.org> | 2005-08-10 17:33:37 +0200 |
---|---|---|
committer | Thomas Schwinge <thomas@schwinge.name> | 2011-11-24 08:17:33 +0100 |
commit | f1d119a500a9294c81330ecd52a3221578a22bc3 (patch) | |
tree | d206cd12ceea487e414a25c5c393ea0823ce7482 | |
parent | 05f5cc229323a61799388fbb52da84ca8cb502c9 (diff) |
Don't forget to update port sequence numbers in stub functions.
* seqnos.c (_pager_stubs_update_seqno): New function.
* priv.h (_pager_stubs_update_seqno): New function.
* notify-stubs.c (_pager_do_seqnos_mach_notify_port_deleted):
Call _pager_stubs_update_seqno to properly update seqno.
(_pager_do_seqnos_mach_notify_msg_accepted): Likewise.
(_pager_do_seqnos_mach_notify_port_destroyed): Likewise.
(_pager_do_seqnos_mach_notify_send_once): Likewise.
(_pager_do_seqnos_mach_notify_dead_name): Likewise.
* stubs.c (_pager_seqnos_memory_object_copy): Likewise.
(_pager_seqnos_memory_object_data_write): Likewise.
(_pager_seqnos_memory_object_supply_completed): Likewise.
-rw-r--r-- | libpager/notify-stubs.c | 13 | ||||
-rw-r--r-- | libpager/priv.h | 3 | ||||
-rw-r--r-- | libpager/seqnos.c | 22 | ||||
-rw-r--r-- | libpager/stubs.c | 12 |
4 files changed, 45 insertions, 5 deletions
diff --git a/libpager/notify-stubs.c b/libpager/notify-stubs.c index 728163e4..aec56e35 100644 --- a/libpager/notify-stubs.c +++ b/libpager/notify-stubs.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1995 Free Software Foundation, Inc. + Copyright (C) 1995, 2011 Free Software Foundation, Inc. Written by Michael I. Bushnell. This file is part of the GNU Hurd. @@ -18,6 +18,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. */ +#include "priv.h" #include "notify_S.h" #include <errno.h> @@ -29,6 +30,8 @@ _pager_do_seqnos_mach_notify_port_deleted (mach_port_t notify mach_port_t name __attribute__ ((unused))) { + _pager_stubs_update_seqno (notify, seqno); + return 0; } @@ -40,6 +43,8 @@ _pager_do_seqnos_mach_notify_msg_accepted (mach_port_t notify mach_port_t name __attribute__ ((unused))) { + _pager_stubs_update_seqno (notify, seqno); + return 0; } @@ -51,6 +56,8 @@ _pager_do_seqnos_mach_notify_port_destroyed (mach_port_t notify mach_port_t name __attribute__ ((unused))) { + _pager_stubs_update_seqno (notify, seqno); + return 0; } @@ -60,6 +67,8 @@ _pager_do_seqnos_mach_notify_send_once (mach_port_t notify mach_port_seqno_t seqno __attribute__ ((unused))) { + _pager_stubs_update_seqno (notify, seqno); + return 0; } @@ -71,5 +80,7 @@ _pager_do_seqnos_mach_notify_dead_name (mach_port_t notify mach_port_t name __attribute__ ((unused))) { + _pager_stubs_update_seqno (notify, seqno); + return 0; } diff --git a/libpager/priv.h b/libpager/priv.h index 80afff1b..7a4fe6fe 100644 --- a/libpager/priv.h +++ b/libpager/priv.h @@ -1,5 +1,5 @@ /* Private data for pager library. - Copyright (C) 1994,95,96,97,99, 2000 Free Software Foundation, Inc. + Copyright (C) 1994-1997, 1999, 2000, 2011 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -133,6 +133,7 @@ struct port_class *_pager_class; void _pager_wait_for_seqno (struct pager *, int); void _pager_release_seqno (struct pager *, int); +void _pager_stubs_update_seqno (mach_port_t, int); void _pager_block_termination (struct pager *); void _pager_allow_termination (struct pager *); error_t _pager_pagemap_resize (struct pager *, vm_address_t); diff --git a/libpager/seqnos.c b/libpager/seqnos.c index 94cce93b..7afe0fbe 100644 --- a/libpager/seqnos.c +++ b/libpager/seqnos.c @@ -1,5 +1,5 @@ /* Sequence number synchronization routines for pager library - Copyright (C) 1994 Free Software Foundation + Copyright (C) 1994, 2011 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 @@ -47,3 +47,23 @@ _pager_release_seqno (struct pager *p, condition_broadcast (&p->wakeup); } } + + +/* Just update the seqno. */ +void +_pager_stubs_update_seqno (mach_port_t object, + int seqno) +{ + struct pager *p; + + p = ports_lookup_port (0, object, _pager_class); + if (p) + { + mutex_lock (&p->interlock); + _pager_wait_for_seqno (p, seqno); + _pager_release_seqno (p, seqno); + mutex_unlock (&p->interlock); + + ports_port_deref (p); + } +} diff --git a/libpager/stubs.c b/libpager/stubs.c index b455699e..44005378 100644 --- a/libpager/stubs.c +++ b/libpager/stubs.c @@ -1,5 +1,5 @@ /* Unused memory object interface stubs - Copyright (C) 1994 Free Software Foundation + Copyright (C) 1994, 2011 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 @@ -29,6 +29,9 @@ _pager_seqnos_memory_object_copy (mach_port_t old, mach_port_t new) { printf ("m_o_copy called\n"); + + _pager_stubs_update_seqno (old, seq); + return EOPNOTSUPP; } @@ -41,6 +44,9 @@ _pager_seqnos_memory_object_data_write (mach_port_t old, vm_size_t data_cnt) { printf ("m_o_data_write called\n"); + + _pager_stubs_update_seqno (old, seq); + return EOPNOTSUPP; } @@ -54,6 +60,8 @@ _pager_seqnos_memory_object_supply_completed (mach_port_t obj, vm_offset_t err_off) { printf ("m_o_supply_completed called\n"); + + _pager_stubs_update_seqno (obj, seq); + return EOPNOTSUPP; } - |