summaryrefslogtreecommitdiff
path: root/sysdeps/l4/pt-wakeup.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/l4/pt-wakeup.c')
-rw-r--r--sysdeps/l4/pt-wakeup.c29
1 files changed, 27 insertions, 2 deletions
diff --git a/sysdeps/l4/pt-wakeup.c b/sysdeps/l4/pt-wakeup.c
index 7b00e4f6..de378465 100644
--- a/sysdeps/l4/pt-wakeup.c
+++ b/sysdeps/l4/pt-wakeup.c
@@ -17,13 +17,38 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <l4/l4.h>
+#include <l4.h>
#include <pt-internal.h>
+#include <hurd/stddef.h>
+
/* Wakeup THREAD. */
void
__pthread_wakeup (struct __pthread *thread)
{
- L4_Send (thread->threadid);
+ debug (5, "%x.%x/%x waking %x.%x/%x",
+ l4_thread_no (l4_myself ()), l4_version (l4_myself ()), l4_myself (),
+ l4_thread_no (thread->threadid), l4_version (thread->threadid),
+ thread->threadid);
+
+ /* Signal the waiter. */
+ l4_msg_t msg;
+ l4_msg_clear (msg);
+ l4_msg_set_untyped_words (msg, 0);
+ l4_msg_load (msg);
+
+ l4_msg_tag_t tag = l4_send (thread->threadid);
+ if (l4_ipc_failed (tag))
+ {
+ int err = l4_error_code ();
+ debug (1, "%x.%x failed to wake %x.%x: %s (%d)",
+ l4_thread_no (l4_myself ()), l4_version (l4_myself ()),
+ l4_thread_no (thread->threadid), l4_version (thread->threadid),
+ l4_strerror (err), err);
+ }
+ else
+ debug (5, "%x.%x woke %x.%x",
+ l4_thread_no (l4_myself ()), l4_version (l4_myself ()),
+ l4_thread_no (thread->threadid), l4_version (thread->threadid));
}