replace __wake function with macro that performs direct syscall
authorRich Felker <dalias@aerifal.cx>
Fri, 1 Feb 2013 21:41:53 +0000 (16:41 -0500)
committerRich Felker <dalias@aerifal.cx>
Fri, 1 Feb 2013 21:41:53 +0000 (16:41 -0500)
this should generate faster and smaller code, especially with inline
syscalls. the conditional with cnt is ugly, but thankfully cnt is
always a constant anyway so it gets evaluated at compile time. it may
be preferable to make separate __wake and __wakeall macros without a
count argument.

priv flag is not used yet; private futex support still needs to be
done at some point in the future.

src/internal/pthread_impl.h
src/thread/__wake.c [deleted file]

index 4215e67ab6237835d512c14d6c639726adab3018..544da9ceec9906ff24b7457e689662265644f372 100644 (file)
@@ -106,7 +106,8 @@ void __unmapself(void *, size_t);
 
 int __timedwait(volatile int *, int, clockid_t, const struct timespec *, void (*)(void *), void *, int);
 void __wait(volatile int *, volatile int *, int, int);
-void __wake(volatile int *, int, int);
+#define __wake(addr, cnt, priv) \
+       __syscall(SYS_futex, addr, FUTEX_WAKE, (cnt)<0?INT_MAX:(cnt))
 
 void __acquire_ptc();
 void __release_ptc();
diff --git a/src/thread/__wake.c b/src/thread/__wake.c
deleted file mode 100644 (file)
index d8bf70f..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "pthread_impl.h"
-#include <limits.h>
-
-void __wake(volatile int *addr, int cnt, int priv)
-{
-       if (priv) priv = 128; priv=0;
-       if (cnt<0) cnt = INT_MAX;
-       __syscall(SYS_futex, (long)addr, FUTEX_WAKE | priv, cnt);
-}