[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Patch to retrieve send rights for shared memory objects
From: |
Barry deFreese |
Subject: |
Patch to retrieve send rights for shared memory objects |
Date: |
Fri, 25 Feb 2005 20:10:36 -0800 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.5) Gecko/20050105 Debian/1.7.5-1 |
OK, I tied Marcus down here in Brussels and forced him to start on SYSV
shm support. Tomorrow night when he falls asleep I will steal his
laptop and commit it unless I hear too much bitching!! :-)
Here is our cool patch:
This patch adds a new interface io_get_refs which returns the number of
extant send rights to the shared memory object for the I/O object.
hurd/
2005-02-26 Marcus Brinkmann <marcus@gnu.org>
* io.defs (io_get_refs): New RPC.
boot/
2005-02-26 Marcus Brinkmann <marcus@gnu.org>
* boot.c (S_io_get_refs): New stub.
libdiskfs/
2005-02-26 Marcus Brinkmann <marcus@gnu.org>
* Makefile (IOSRCS): Add io-get-refs.c.
* io-get-refs.c: New file.
libnetfs/
2005-02-26 Marcus Brinkmann <marcus@gnu.org>
* iostubs.c (netfs_S_io_get_refs): New stub.
libtrivfs/
2005-02-26 Marcus Brinkmann <marcus@gnu.org>
* io-stubs.c (trivfs_S_io_get_refs): New stub.
pflocal/
2005-02-26 Marcus Brinkmann <marcus@gnu.org>
* io.c (S_io_get_refs): New stub.
pfinet/
2005-02-26 Marcus Brinkmann <marcus@gnu.org>
* io-ops.c (S_io_get_refs): New stub.
Index: boot/boot.c
===================================================================
RCS file: /cvsroot/hurd/hurd/boot/boot.c,v
retrieving revision 1.108
diff -u -p -r1.108 boot.c
--- boot/boot.c 13 Jun 2002 20:57:45 -0000 1.108
+++ boot/boot.c 26 Feb 2005 02:53:58 -0000
@@ -1768,6 +1768,13 @@ S_io_revoke (mach_port_t obj,
return EOPNOTSUPP;
}
+kern_return_t
+S_io_get_refs (mach_port_t obj,
+ mach_port_t reply, mach_msg_type_name_t replyPoly,
+ mach_port_urefs_t *refs)
+{
+ return EOPNOTSUPP;
+}
/* Implementation of the Hurd terminal driver interface, which we only
Index: hurd/io.defs
===================================================================
RCS file: /cvsroot/hurd/hurd/hurd/io.defs,v
retrieving revision 1.37
diff -u -p -r1.37 io.defs
--- hurd/io.defs 9 Nov 2004 14:38:03 -0000 1.37
+++ hurd/io.defs 26 Feb 2005 02:54:03 -0000
@@ -320,3 +320,10 @@ routine io_identity (
on the specified object. */
routine io_revoke (
io_object: io_t RPTLAST);
+
+/* Return the number of extant send rights on the object. This allows
+ you to peek at how many other users there might be. */
+routine io_get_refs (
+ io_object: io_t;
+ RPT
+ out refs: mach_port_urefs_t);
Index: libdiskfs/Makefile
===================================================================
RCS file: /cvsroot/hurd/hurd/libdiskfs/Makefile,v
retrieving revision 1.71
diff -u -p -r1.71 Makefile
--- libdiskfs/Makefile 27 Jun 2002 19:19:13 -0000 1.71
+++ libdiskfs/Makefile 26 Feb 2005 02:54:03 -0000
@@ -32,7 +32,8 @@ IOSRCS= io-async-icky.c io-async.c io-du
io-modes-on.c io-modes-set.c io-owner-mod.c io-owner-get.c \
io-pathconf.c io-prenotify.c io-read.c io-readable.c io-identity.c \
io-reauthenticate.c io-rel-conch.c io-restrict-auth.c io-seek.c \
- io-select.c io-stat.c io-stubs.c io-write.c io-version.c io-sigio.c
+ io-select.c io-stat.c io-stubs.c io-write.c io-version.c io-sigio.c \
+ io-get-refs.c
FSYSSRCS=fsys-getroot.c fsys-goaway.c fsys-startup.c fsys-getfile.c \
fsys-options.c fsys-syncfs.c fsys-forward.c
IFSOCKSRCS=ifsock.c
Index: libnetfs/iostubs.c
===================================================================
RCS file: /cvsroot/hurd/hurd/libnetfs/iostubs.c,v
retrieving revision 1.4
diff -u -p -r1.4 iostubs.c
--- libnetfs/iostubs.c 13 Sep 1999 06:33:54 -0000 1.4
+++ libnetfs/iostubs.c 26 Feb 2005 02:54:04 -0000
@@ -87,3 +87,9 @@ netfs_S_io_sigio (struct protid *user)
{
return EOPNOTSUPP;
}
+
+error_t
+netfs_S_io_get_refs (struct protid *cred, mach_port_urefs_t *refs)
+{
+ return EOPNOTSUPP;
+}
Index: libtrivfs/io-stubs.c
===================================================================
RCS file: /cvsroot/hurd/hurd/libtrivfs/io-stubs.c,v
retrieving revision 1.6
diff -u -p -r1.6 io-stubs.c
--- libtrivfs/io-stubs.c 13 Jun 2002 21:26:15 -0000 1.6
+++ libtrivfs/io-stubs.c 26 Feb 2005 02:54:06 -0000
@@ -98,3 +98,13 @@ trivfs_S_io_readnotify (struct trivfs_pr
{
return EOPNOTSUPP;
}
+
+/* Implement io_get_refs as described in <hurd/io.defs>. */
+kern_return_t
+trivfs_S_io_get_refs (struct trivfs_protid *cred, mach_port_t reply,
+ mach_msg_type_name_t replytype,
+ mach_port_urefs_t *refs)
+{
+ return EOPNOTSUPP;
+}
+
Index: pfinet/io-ops.c
===================================================================
RCS file: /cvsroot/hurd/hurd/pfinet/io-ops.c,v
retrieving revision 1.28
diff -u -p -r1.28 io-ops.c
--- pfinet/io-ops.c 11 Jun 2002 21:40:25 -0000 1.28
+++ pfinet/io-ops.c 26 Feb 2005 02:54:06 -0000
@@ -606,3 +606,12 @@ S_io_sigio (struct sock_user *user)
{
return EOPNOTSUPP;
}
+
+
+/* Implement io_get_refs as described in <hurd/io.defs>. */
+error_t
+S_io_get_refs (struct sock_user *cred, mach_port_urefs_t *refs)
+{
+ return EOPNOTSUPP;
+}
+
Index: pflocal/io.c
===================================================================
RCS file: /cvsroot/hurd/hurd/pflocal/io.c,v
retrieving revision 1.39
diff -u -p -r1.39 io.c
--- pflocal/io.c 11 Jun 2002 21:40:34 -0000 1.39
+++ pflocal/io.c 26 Feb 2005 02:54:07 -0000
@@ -619,3 +619,10 @@ S_io_server_version (struct sock_user *u
{
return EOPNOTSUPP;
}
+
+/* Implement io_get_refs as described in <hurd/io.defs>. */
+error_t
+S_io_get_refs (struct sock_user *cred, mach_port_urefs_t *refs)
+{
+ return EOPNOTSUPP;
+}
--- /dev/null 2005-02-17 12:38:26.000000000 -0500
+++ libdiskfs/io-get-refs.c 2005-02-25 14:47:35.000000000 -0500
@@ -0,0 +1,55 @@
+/* io-get-refs.c - Get the number of extant send rights.
+ Copyright (C) 2005 Free Software Foundation
+ Written by Marcus Brinkmann <marcus@gnu.org>.
+
+ This program 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.
+
+ This program 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 this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+#include "priv.h"
+#include "io_S.h"
+
+/* Implement io_get_refs as described in <hurd/io.defs>. */
+error_t
+diskfs_S_io_get_refs (struct protid *cred, mach_port_urefs_t *refs)
+{
+ error_t err = 0;
+ struct node *node;
+ memory_object_t shared;
+
+ if (!cred)
+ return EOPNOTSUPP;
+
+ node = cred->po->np;
+
+ mutex_lock (&node->lock);
+
+ /* Mmmh. We could use a flag that says "do not create an object if
+ it doesn't exist already. */
+ shared = diskfs_get_filemap (cred->po->np, 0);
+ if (shared == MACH_PORT_NULL)
+ {
+ *refs = 0;
+ /* FIXME: What error? diskfs_get_filemap should return it. */
+ err = ENOMEM;
+ }
+ else
+ {
+ err = mach_port_get_refs (mach_task_self (),
+ shared, MACH_PORT_RIGHT_SEND, refs);
+ mach_port_deallocate (mach_task_self (), shared);
+ }
+ mutex_unlock (&node->lock);
+
+ return err;
+}
--
Barry deFreese
Debian 3.0r1 "Woody"
GNU/Hurd
Registered Linux "Newbie" #302256 - Hurd H4XX0r wannabe
"Programming today is a race between software engineers striving
to build bigger and better idiot-proof programs, and the Universe
trying to produce bigger and better idiots. So far, the Universe is
winning." Rich Cook.
- Patch to retrieve send rights for shared memory objects,
Barry deFreese <=