summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergio Lopez <koro@sinrega.org>2005-08-10 17:33:37 +0200
committerThomas Schwinge <thomas@schwinge.name>2011-11-24 08:17:33 +0100
commitf1d119a500a9294c81330ecd52a3221578a22bc3 (patch)
treed206cd12ceea487e414a25c5c393ea0823ce7482
parent05f5cc229323a61799388fbb52da84ca8cb502c9 (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.c13
-rw-r--r--libpager/priv.h3
-rw-r--r--libpager/seqnos.c22
-rw-r--r--libpager/stubs.c12
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;
}
-