summaryrefslogtreecommitdiff
path: root/sysdeps/l4/pt-thread-alloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/l4/pt-thread-alloc.c')
-rw-r--r--sysdeps/l4/pt-thread-alloc.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/sysdeps/l4/pt-thread-alloc.c b/sysdeps/l4/pt-thread-alloc.c
index a9d5e212..fc2f43b4 100644
--- a/sysdeps/l4/pt-thread-alloc.c
+++ b/sysdeps/l4/pt-thread-alloc.c
@@ -1,5 +1,5 @@
-/* Start thread. L4 version.
- Copyright (C) 2002 Free Software Foundation, Inc.
+/* Allocate kernel thread. L4 version.
+ Copyright (C) 2003, 2005 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -23,20 +23,30 @@
#include <pt-internal.h>
-/* Start THREAD. Get the kernel thread scheduled and running. */
int
-__pthread_thread_start (struct __pthread *thread)
+__pthread_thread_alloc (struct __pthread *thread)
{
error_t err;
/* The main thread is already running of course. */
if (__pthread_num_threads == 1)
{
+ /* XXX: The initialization code needs to make this consistent.
+ Right now, we have none and this whole library is a hack
+ anyways. */
+#warning __pthread_total is inconsistent.
+#if 0
assert (__pthread_total == 1);
- thread->thread_id = L4_Myself ();
+#endif
+ thread->threadid = l4_myself ();
}
else
{
+ thread->threadid = pthread_pool_get_np ();
+ if (thread->threadid != l4_nilthread)
+ return 0;
+
+#if 0
CORBA_Environment env;
env = idl4_default_environment;
@@ -45,8 +55,8 @@ __pthread_thread_start (struct __pthread *thread)
* (L4_Word_t *) &__system_pager,
(L4_Word_t *) &thread->threadid, &env);
if (err)
+#endif
return EAGAIN;
}
-
return 0;
}