From e3c51fc088975f5b74e68a314e8fdfc907ad9640 Mon Sep 17 00:00:00 2001 From: Justus Winter <4winter@informatik.uni-hamburg.de> Date: Thu, 15 Aug 2013 09:38:01 +0200 Subject: libtrivfs: register libtrivfs-based translators as important Register libtrivfs-based translators running as root as important processes at the proc server. * libtrivfs/startup.c (trivfs_startup): Mark us as important. --- libtrivfs/startup.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'libtrivfs') diff --git a/libtrivfs/startup.c b/libtrivfs/startup.c index 86b0f827..4d76d47c 100644 --- a/libtrivfs/startup.c +++ b/libtrivfs/startup.c @@ -65,5 +65,24 @@ trivfs_startup(mach_port_t bootstrap, int flags, if (!err && control) *control = fsys; + /* Mark us as important. */ + if (! err) + { + mach_port_t proc = getproc (); + if (proc == MACH_PORT_NULL) + /* /hurd/exec uses libtrivfs. We have no handle to the proc + server in /hurd/exec when it does its handshake with the + root filesystem, so fail graciously here. */ + return 0; + + err = proc_mark_important (proc); + /* This might fail due to permissions or because the old proc + server is still running, ignore any such errors. */ + if (err == EPERM || err == EMIG_BAD_ID) + err = 0; + + mach_port_deallocate (mach_task_self (), proc); + } + return err; } -- cgit v1.2.3