summaryrefslogtreecommitdiff
path: root/exec
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2015-07-12 14:46:50 +0200
committerJustus Winter <4winter@informatik.uni-hamburg.de>2015-07-14 20:23:00 +0200
commit827915ca4a4d61ae5b50596e46f5aaf7d402a2c0 (patch)
tree1595a8aff7c9614225573c44bcb9f81a893a3649 /exec
parentbe0a34cf05c1bcbb119d91a74be44ee837861426 (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.c50
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);