summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordas <das@FreeBSD.org>2009-03-14 20:10:14 +0000
committerdas <das@FreeBSD.org>2009-03-14 20:10:14 +0000
commit964bf49d5b6b27726d6577e76032862c64067087 (patch)
treed51c3f8bea660e6f11b1b17bde360879037f75a6
parentcb6ddc029f7b4f33a43a6cf233d258cf5546960b (diff)
downloadFreeBSD-src-964bf49d5b6b27726d6577e76032862c64067087.zip
FreeBSD-src-964bf49d5b6b27726d6577e76032862c64067087.tar.gz
Fix the visibility of several prototypes. Also move pthread_kill() and
pthread_sigmask() to signal.h. In principle, this shouldn't break anything, since they're already in signal.h on other systems, and the FreeBSD manpage says that both pthread.h and signal.h need to be included to get these functions. Add a hack to declare pthread_t in the P1003.1-2008 namespace in signal.h.
-rw-r--r--include/pthread.h6
-rw-r--r--include/signal.h13
-rw-r--r--sys/sys/_pthreadtypes.h3
3 files changed, 19 insertions, 3 deletions
diff --git a/include/pthread.h b/include/pthread.h
index fad12b1..9edd48b 100644
--- a/include/pthread.h
+++ b/include/pthread.h
@@ -205,7 +205,6 @@ int pthread_join(pthread_t, void **);
int pthread_key_create(pthread_key_t *,
void (*) (void *));
int pthread_key_delete(pthread_key_t);
-int pthread_kill(pthread_t, int);
int pthread_mutexattr_init(pthread_mutexattr_t *);
int pthread_mutexattr_destroy(pthread_mutexattr_t *);
int pthread_mutexattr_getpshared(const pthread_mutexattr_t *,
@@ -241,7 +240,6 @@ int pthread_rwlockattr_setpshared(pthread_rwlockattr_t *, int);
int pthread_rwlockattr_destroy(pthread_rwlockattr_t *);
pthread_t pthread_self(void);
int pthread_setspecific(pthread_key_t, const void *);
-int pthread_sigmask(int, const __sigset_t *, __sigset_t *);
int pthread_spin_init(pthread_spinlock_t *, int);
int pthread_spin_destroy(pthread_spinlock_t *);
@@ -253,9 +251,11 @@ int pthread_setcancelstate(int, int *);
int pthread_setcanceltype(int, int *);
void pthread_testcancel(void);
+#if __BSD_VISIBLE
int pthread_getprio(pthread_t);
int pthread_setprio(pthread_t, int);
void pthread_yield(void);
+#endif
int pthread_mutexattr_getprioceiling(pthread_mutexattr_t *,
int *);
@@ -281,8 +281,10 @@ int pthread_getschedparam(pthread_t pthread, int *,
struct sched_param *);
int pthread_setschedparam(pthread_t, int,
const struct sched_param *);
+#if __XSI_VISIBLE
int pthread_getconcurrency(void);
int pthread_setconcurrency(int);
+#endif
void __pthread_cleanup_push_imp(void (*)(void *), void *,
struct _pthread_cleanup_info *);
diff --git a/include/signal.h b/include/signal.h
index 8d7c281..fdb4b3e 100644
--- a/include/signal.h
+++ b/include/signal.h
@@ -58,11 +58,22 @@ typedef __pid_t pid_t;
#endif
#endif
+#if __POSIX_VISIBLE || __XSI_VISIBLE
+struct pthread; /* XXX */
+typedef struct pthread *__pthread_t;
+#if !defined(_PTHREAD_T_DECLARED) && __POSIX_VISIBLE >= 200809
+typedef __pthread_t pthread_t;
+#define _PTHREAD_T_DECLARED
+#endif
+#endif /* __POSIX_VISIBLE || __XSI_VISIBLE */
+
__BEGIN_DECLS
int raise(int);
#if __POSIX_VISIBLE || __XSI_VISIBLE
int kill(__pid_t, int);
+int pthread_kill(__pthread_t, int);
+int pthread_sigmask(int, const __sigset_t *, __sigset_t *);
int sigaction(int, const struct sigaction * __restrict,
struct sigaction * __restrict);
int sigaddset(sigset_t *, int);
@@ -91,7 +102,7 @@ int sigaltstack(const stack_t * __restrict, stack_t * __restrict);
int sigpause(int);
#endif
-#if __POSIX_VISIBLE >= 200112
+#if __XSI_VISIBLE >= 600
int siginterrupt(int, int);
#endif
diff --git a/sys/sys/_pthreadtypes.h b/sys/sys/_pthreadtypes.h
index 6337540..76049ee 100644
--- a/sys/sys/_pthreadtypes.h
+++ b/sys/sys/_pthreadtypes.h
@@ -61,7 +61,10 @@ struct pthread_spinlock;
* or assignment operators for the types pthread_attr_t, pthread_cond_t,
* pthread_condattr_t, pthread_mutex_t, pthread_mutexattr_t.
*/
+#ifndef _PTHREAD_T_DECLARED
typedef struct pthread *pthread_t;
+#define _PTHREAD_T_DECLARED
+#endif
typedef struct pthread_attr *pthread_attr_t;
typedef struct pthread_mutex *pthread_mutex_t;
typedef struct pthread_mutex_attr *pthread_mutexattr_t;
OpenPOWER on IntegriCloud