diff options
author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2015-07-12 14:46:50 +0200 |
---|---|---|
committer | Justus Winter <4winter@informatik.uni-hamburg.de> | 2015-07-14 20:23:00 +0200 |
commit | 827915ca4a4d61ae5b50596e46f5aaf7d402a2c0 (patch) | |
tree | 1595a8aff7c9614225573c44bcb9f81a893a3649 /exec | |
parent | be0a34cf05c1bcbb119d91a74be44ee837861426 (diff) |
exec: fix setting the name of early servers
Previously, the exec server did not set the name of the servers
started before the proc server. Instead this was done by the startup
server, but this was merely a workaround, missing notably the startup
server itself.
* exec/exec.c (set_name): New function.
(do_exec): Move the code setting the name to a new function, and also
call it if the proc server is not started yet.
* startup/startup.c (run): Drop hack.
Diffstat (limited to 'exec')
-rw-r--r-- | exec/exec.c | 50 |
1 files changed, 33 insertions, 17 deletions
diff --git a/exec/exec.c b/exec/exec.c index ee500d7d..3b63b7f6 100644 --- a/exec/exec.c +++ b/exec/exec.c @@ -686,6 +686,36 @@ finish (struct execdata *e, int dealloc_file) } } +/* Set the name of the new task so that the kernel can use it in error + messages. If PID is not zero, it will be included the name. */ +static void +set_name (task_t task, const char *exec_name, pid_t pid) +{ + char *name; + int size; + + if (pid) + size = asprintf (&name, "%s(%d)", exec_name, pid); + else + size = asprintf (&name, "%s", exec_name); + + if (size == 0) + return; + + /* This is an internal implementational detail of the GNU Mach kernel. */ +#define TASK_NAME_SIZE 32 + if (size < TASK_NAME_SIZE) + task_set_name (task, name); + else + { + char *abbr = name + size - TASK_NAME_SIZE + 1; + abbr[0] = abbr[1] = abbr[2] = '.'; + task_set_name (task, abbr); + } +#undef TASK_NAME_SIZE + + free (name); +} /* Load the file. */ static void @@ -1173,24 +1203,10 @@ do_exec (file_t file, if (e.error) goto out; - char *name; - int size = asprintf (&name, "%s(%d)", argv, pid); - if (size > 0) - { -/* This is an internal implementational detail of the gnumach kernel. */ -#define TASK_NAME_SIZE 32 - if (size < TASK_NAME_SIZE) - task_set_name (newtask, name); - else - { - char *abbr = name + size - TASK_NAME_SIZE + 1; - abbr[0] = abbr[1] = abbr[2] = '.'; - task_set_name (newtask, abbr); - } -#undef TASK_NAME_SIZE - free (name); - } + set_name (newtask, argv, pid); } + else + set_name (newtask, argv, 0); /* Create the initial thread. */ e.error = thread_create (newtask, &thread); |