add stub versions of some missing optional pthread interfaces
authorRich Felker <dalias@aerifal.cx>
Sat, 17 Nov 2012 23:42:16 +0000 (18:42 -0500)
committerRich Felker <dalias@aerifal.cx>
Sat, 17 Nov 2012 23:42:16 +0000 (18:42 -0500)
priority inheritance is not yet supported, and priority protection
probably will not be supported ever unless there's serious demand for
it (it's a fairly heavy-weight feature).

per-thread cpu clocks would be nice to have, but to my knowledge linux
is still not capable of supporting them. glibc fakes them by using the
_process_ cpu-time clock and subtracting the thread creation time,
which gives seriously incorrect semantics (worse than not supporting
the feature at all), so until there's a way to do it right, it will
remain as a stub that always fails.

include/pthread.h
src/thread/pthread_attr_get.c
src/thread/pthread_getcpuclockid.c [new file with mode: 0644]
src/thread/pthread_mutex_getprioceiling.c [new file with mode: 0644]
src/thread/pthread_mutex_setprioceiling.c [new file with mode: 0644]
src/thread/pthread_mutexattr_setprotocol.c [new file with mode: 0644]

index 660a64d..6eee14c 100644 (file)
@@ -105,6 +105,9 @@ int pthread_mutex_timedlock(pthread_mutex_t *__restrict, const struct timespec *
 int pthread_mutex_destroy(pthread_mutex_t *);
 int pthread_mutex_consistent(pthread_mutex_t *);
 
+int pthread_mutex_getprioceiling(const pthread_mutex_t *__restrict, int *__restrict);
+int pthread_mutex_setprioceiling(pthread_mutex_t *__restrict, int, int *__restrict);
+
 int pthread_cond_init(pthread_cond_t *__restrict, const pthread_condattr_t *__restrict);
 int pthread_cond_destroy(pthread_cond_t *);
 int pthread_cond_wait(pthread_cond_t *__restrict, pthread_mutex_t *__restrict);
@@ -192,6 +195,8 @@ int pthread_atfork(void (*)(void), void (*)(void), void (*)(void));
 int pthread_getconcurrency(void);
 int pthread_setconcurrency(int);
 
+int pthread_getcpuclockid(pthread_t, clockid_t *);
+
 struct __ptcb {
        void (*__f)(void *);
        void *__x;
index f81103d..e4650e4 100644 (file)
@@ -68,6 +68,11 @@ int pthread_condattr_getpshared(const pthread_condattr_t *restrict a, int *restr
        return 0;
 }
 
+int pthread_mutexattr_getprotocol(const pthread_mutexattr_t *restrict a, int *restrict protocol)
+{
+       *protocol = PTHREAD_PRIO_NONE;
+       return 0;
+}
 int pthread_mutexattr_getpshared(const pthread_mutexattr_t *restrict a, int *restrict pshared)
 {
        *pshared = *a>>31;
diff --git a/src/thread/pthread_getcpuclockid.c b/src/thread/pthread_getcpuclockid.c
new file mode 100644 (file)
index 0000000..cf3d2b8
--- /dev/null
@@ -0,0 +1,6 @@
+#include "pthread_impl.h"
+
+int pthread_getcpuclockid(pthread_t t, clockid_t *clockid)
+{
+       return ENOSYS;
+}
diff --git a/src/thread/pthread_mutex_getprioceiling.c b/src/thread/pthread_mutex_getprioceiling.c
new file mode 100644 (file)
index 0000000..8c75a66
--- /dev/null
@@ -0,0 +1,6 @@
+#include "pthread_impl.h"
+
+int pthread_mutex_getprioceiling(const pthread_mutex_t *restrict m, int *restrict ceiling)
+{
+       return EINVAL;
+}
diff --git a/src/thread/pthread_mutex_setprioceiling.c b/src/thread/pthread_mutex_setprioceiling.c
new file mode 100644 (file)
index 0000000..681f07c
--- /dev/null
@@ -0,0 +1,6 @@
+#include "pthread_impl.h"
+
+int pthread_mutex_setprioceiling(pthread_mutex_t *restrict m, int ceiling, int *restrict old)
+{
+       return EINVAL;
+}
diff --git a/src/thread/pthread_mutexattr_setprotocol.c b/src/thread/pthread_mutexattr_setprotocol.c
new file mode 100644 (file)
index 0000000..c92a31c
--- /dev/null
@@ -0,0 +1,7 @@
+#include "pthread_impl.h"
+
+int pthread_mutexattr_setprotocol(pthread_mutexattr_t *a, int protocol)
+{
+       if (protocol) return ENOTSUP;
+       return 0;
+}