summaryrefslogtreecommitdiff
path: root/task/task-class.c
diff options
context:
space:
mode:
Diffstat (limited to 'task/task-class.c')
-rw-r--r--task/task-class.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/task/task-class.c b/task/task-class.c
index 4fa4420..20a3f2d 100644
--- a/task/task-class.c
+++ b/task/task-class.c
@@ -35,7 +35,7 @@
static void
task_reinit (hurd_cap_class_t cap_class, hurd_cap_obj_t obj)
{
- task_t task = (task_t) obj;
+ task_t task = hurd_cap_obj_to_user (task_t, obj);
unsigned int i;
/* Destroy all threads. */
@@ -87,8 +87,7 @@ static struct hurd_cap_class task_class;
error_t
task_class_init ()
{
- return hurd_cap_class_init (&task_class, sizeof (struct task),
- __alignof__ (struct task),
+ return hurd_cap_class_init (&task_class, task_t,
NULL, NULL, task_reinit, NULL,
task_demuxer);
}
@@ -100,20 +99,22 @@ task_class_init ()
reference. */
error_t
task_alloc (l4_word_t task_id, unsigned int nr_threads,
- l4_thread_id_t *threads, hurd_cap_obj_t *r_obj)
+ l4_thread_id_t *threads, task_t *r_task)
{
error_t err;
+ hurd_cap_obj_t obj;
task_t task;
- err = hurd_cap_class_alloc (&task_class, (hurd_cap_obj_t *) &task);
+ err = hurd_cap_class_alloc (&task_class, &obj);
if (err)
return err;
+ task = hurd_cap_obj_to_user (task_t, obj);
task->task_id = task_id;
assert (nr_threads <= MAX_THREADS);
task->nr_threads = nr_threads;
memcpy (task->threads, threads, sizeof (l4_thread_id_t) * nr_threads);
- *r_obj = &task->obj;
+ *r_task = task;
return 0;
}