diff options
author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2014-11-07 14:57:43 +0100 |
---|---|---|
committer | Justus Winter <4winter@informatik.uni-hamburg.de> | 2014-11-21 05:55:40 +0100 |
commit | 8bee9fcf5fc9e47e1aac0a670cc8d5e3fba8a7dd (patch) | |
tree | 778fce47cc86832b2f28ca7de67a010ea26c261d /proc/main.c | |
parent | 788407b951b162148a2e223da69ff2c16d8d05b4 (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.c | 44 |
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 |