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  <[EMAIL PROTECTED]>

      * io.defs (io_get_refs): New RPC.

boot/
2005-02-26  Marcus Brinkmann  <[EMAIL PROTECTED]>

        * boot.c (S_io_get_refs): New stub.

libdiskfs/
2005-02-26  Marcus Brinkmann  <[EMAIL PROTECTED]>

        * Makefile (IOSRCS): Add io-get-refs.c.
        * io-get-refs.c: New file.

libnetfs/
2005-02-26  Marcus Brinkmann  <[EMAIL PROTECTED]>

        * iostubs.c (netfs_S_io_get_refs): New stub.

libtrivfs/
2005-02-26  Marcus Brinkmann  <[EMAIL PROTECTED]>

        * io-stubs.c (trivfs_S_io_get_refs): New stub.

pflocal/
2005-02-26  Marcus Brinkmann  <[EMAIL PROTECTED]>

        * io.c (S_io_get_refs): New stub.

pfinet/
2005-02-26  Marcus Brinkmann  <[EMAIL PROTECTED]>

        * 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 <[EMAIL PROTECTED]>.
+
+ 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.





_______________________________________________
Bug-hurd mailing list
Bug-hurd@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-hurd

Reply via email to