commit-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[hurd] 33/43: libdiskfs: Use control class for the singleton 'bootinfo'.


From: Samuel Thibault
Subject: [hurd] 33/43: libdiskfs: Use control class for the singleton 'bootinfo'.
Date: Mon, 11 Sep 2017 07:10:11 +0000

This is an automated email from the git hooks/post-receive script.

sthibault pushed a commit to branch upstream
in repository hurd.

commit a3254ced93e2db103d7395c4d5a727260ae69894
Author: Justus Winter <address@hidden>
Date:   Thu Aug 24 16:45:49 2017 +0200

    libdiskfs: Use control class for the singleton 'bootinfo'.
    
    * libdiskfs/boot-start.c (bootinfo): New variable.
    (diskfs_start_bootstrap): Create 'bootinfo' as an instance of
    'diskfs_control_class'.
    (diskfs_S_fsys_getpriv): Only allow operation on 'bootinfo'.
    (diskfs_S_fsys_init): Allow operation on any control object, but only
    once.
    * libdiskfs/diskfs.h (diskfs_initboot_class): Drop declaration.
    * libdiskfs/init-init.c (diskfs_initboot_class): Drop variable.
    (diskfs_init_diskfs): Adapt.
---
 libdiskfs/boot-start.c | 15 ++++++++-------
 libdiskfs/diskfs.h     |  1 -
 libdiskfs/init-init.c  |  2 --
 3 files changed, 8 insertions(+), 10 deletions(-)

diff --git a/libdiskfs/boot-start.c b/libdiskfs/boot-start.c
index d004447..1b76ebd 100644
--- a/libdiskfs/boot-start.c
+++ b/libdiskfs/boot-start.c
@@ -38,6 +38,10 @@
 #include "fsys_S.h"
 #include "fsys_reply_U.h"
 
+/* We use this port to communicate with startup.  It is the only
+   object that fsys_getpriv and fsys_init may be invoked upon.  */
+static struct port_info *bootinfo;
+
 static mach_port_t diskfs_exec_ctl;
 extern task_t diskfs_exec_server_task;
 extern task_t diskfs_kernel_task;
@@ -104,7 +108,6 @@ diskfs_start_bootstrap ()
   char *exec_argv, *exec_env;
   const char *initname;
   size_t exec_argvlen, exec_envlen;
-  struct port_info *bootinfo;
   struct protid *rootpi;
   struct peropen *rootpo;
   mach_port_t diskfs_exec;
@@ -282,11 +285,10 @@ diskfs_start_bootstrap ()
   assert_backtrace (retry == FS_RETRY_NORMAL);
   assert_backtrace (pathbuf[0] == '\0');
 
-  err = ports_create_port (diskfs_initboot_class, diskfs_port_bucket,
+  err = ports_create_port (diskfs_control_class, diskfs_port_bucket,
                           sizeof (struct port_info), &bootinfo);
   assert_perror_backtrace (err);
   bootpt = ports_get_send_right (bootinfo);
-  ports_port_deref (bootinfo);
 
   portarray[INIT_PORT_CRDIR] = root_pt;
   portarray[INIT_PORT_CWDIR] = root_pt;
@@ -461,7 +463,7 @@ diskfs_S_fsys_getpriv (struct diskfs_control 
*init_bootstrap_port,
   error_t err;
 
   if (!init_bootstrap_port
-      || init_bootstrap_port->pi.class != diskfs_initboot_class)
+      || init_bootstrap_port != bootinfo)
     return EOPNOTSUPP;
 
   err = get_privileged_ports (host_priv, dev_master);
@@ -490,10 +492,9 @@ diskfs_S_fsys_init (struct diskfs_control *pt,
   struct protid *rootpi;
   struct peropen *rootpo;
 
-  if (!pt
-      || pt->pi.class != diskfs_initboot_class)
+  if (!pt)
     return EOPNOTSUPP;
-  
+
   if (initdone)
     return EOPNOTSUPP;
   initdone = 1;
diff --git a/libdiskfs/diskfs.h b/libdiskfs/diskfs.h
index ea79a1d..402b65e 100644
--- a/libdiskfs/diskfs.h
+++ b/libdiskfs/diskfs.h
@@ -216,7 +216,6 @@ struct pager;
 extern struct port_class *diskfs_protid_class;
 extern struct port_class *diskfs_control_class;
 extern struct port_class *diskfs_execboot_class;
-extern struct port_class *diskfs_initboot_class;
 extern struct port_class *diskfs_shutdown_notification_class;
 
 extern struct port_bucket *diskfs_port_bucket;
diff --git a/libdiskfs/init-init.c b/libdiskfs/init-init.c
index e642c2e..b9a714f 100644
--- a/libdiskfs/init-init.c
+++ b/libdiskfs/init-init.c
@@ -46,7 +46,6 @@ int _diskfs_ncontrol_ports;
 
 struct port_class *diskfs_protid_class;
 struct port_class *diskfs_control_class;
-struct port_class *diskfs_initboot_class;
 struct port_class *diskfs_execboot_class;
 struct port_class *diskfs_shutdown_notification_class;
 
@@ -91,7 +90,6 @@ diskfs_init_diskfs (void)
 
   diskfs_protid_class = ports_create_class (diskfs_protid_rele, 0);
   diskfs_control_class = ports_create_class (_diskfs_control_clean, 0);
-  diskfs_initboot_class = ports_create_class (0, 0);
   diskfs_execboot_class = ports_create_class (0, 0);
   diskfs_shutdown_notification_class = ports_create_class (0, 0);
 

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-hurd/hurd.git



reply via email to

[Prev in Thread] Current Thread [Next in Thread]