summaryrefslogtreecommitdiff
path: root/proc/main.c
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2014-11-07 14:57:43 +0100
committerJustus Winter <4winter@informatik.uni-hamburg.de>2014-11-21 05:55:40 +0100
commit8bee9fcf5fc9e47e1aac0a670cc8d5e3fba8a7dd (patch)
tree778fce47cc86832b2f28ca7de67a010ea26c261d /proc/main.c
parent788407b951b162148a2e223da69ff2c16d8d05b4 (diff)
proc: gracefully handle failure to increase priority
* proc/main.c (increase_priority): New function. (main): Move code increasing the proc servers priority to a new function and handle errors gracefully.
Diffstat (limited to 'proc/main.c')
-rw-r--r--proc/main.c44
1 files changed, 32 insertions, 12 deletions
diff --git a/proc/main.c b/proc/main.c
index f1f4e1b0..3419d44d 100644
--- a/proc/main.c
+++ b/proc/main.c
@@ -60,12 +60,40 @@ message_demuxer (mach_msg_header_t *inp,
pthread_mutex_t global_lock = PTHREAD_MUTEX_INITIALIZER;
+error_t
+increase_priority (void)
+{
+ mach_port_t pset = MACH_PORT_NULL, psetcntl = MACH_PORT_NULL;
+ error_t err;
+
+ err = thread_get_assignment (mach_thread_self (), &pset);
+ if (err)
+ goto out;
+
+ err = host_processor_set_priv (_hurd_host_priv, pset, &psetcntl);
+ if (err)
+ goto out;
+
+ err = thread_max_priority (mach_thread_self (), psetcntl, 0);
+ if (err)
+ goto out;
+
+ err = task_priority (mach_task_self (), 2, 1);
+
+ out:
+ if (MACH_PORT_VALID (pset))
+ mach_port_deallocate (mach_task_self (), pset);
+ if (MACH_PORT_VALID (psetcntl))
+ mach_port_deallocate (mach_task_self (), psetcntl);
+
+ return err;
+}
+
int
main (int argc, char **argv, char **envp)
{
mach_port_t boot;
error_t err;
- mach_port_t pset, psetcntl;
void *genport;
process_t startup_port;
struct argp argp = { 0, 0, 0, "Hurd process server" };
@@ -120,17 +148,9 @@ main (int argc, char **argv, char **envp)
/* Give ourselves good scheduling performance, because we are so
important. */
- err = thread_get_assignment (mach_thread_self (), &pset);
- assert_perror (err);
- err = host_processor_set_priv (_hurd_host_priv, pset, &psetcntl);
- assert_perror (err);
- thread_max_priority (mach_thread_self (), psetcntl, 0);
- assert_perror (err);
- err = task_priority (mach_task_self (), 2, 1);
- assert_perror (err);
-
- mach_port_deallocate (mach_task_self (), pset);
- mach_port_deallocate (mach_task_self (), psetcntl);
+ err = increase_priority ();
+ if (err)
+ error (0, err, "Increasing priority failed");
{
/* Get our stderr set up to print on the console, in case we have