Move some pthread functions to signal.h.
POSIX specifies that pthread_kill(3) and pthread_sigmask(3) are supposed to live in signal.h rather than pthread.h. Since signal.h now needs pthread_t and pthread_attr_t, I've moved those defintions into include/machine/pthread_types.h to keep the namespace clean. I also sorted some includes. The combination of these two things seems to have exploded into a cascade of missing includes, so this patch also cleans up all those. Change-Id: Icfa92a39432fe83f542a797e5a113289d7e4ad0c
This commit is contained in:
parent
f664034887
commit
75ef63d6cf
10 changed files with 70 additions and 25 deletions
|
@ -26,6 +26,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
#include <locale.h>
|
||||
#include <pthread.h>
|
||||
#include <stdlib.h>
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
*/
|
||||
|
||||
#include <mntent.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "private/ThreadLocalBuffer.h"
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
|
||||
#include <errno.h>
|
||||
#include <pthread.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
struct atfork_t {
|
||||
atfork_t* next;
|
||||
|
|
|
@ -28,6 +28,8 @@
|
|||
|
||||
#include "pthread_internal.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "private/bionic_futex.h"
|
||||
#include "private/bionic_tls.h"
|
||||
#include "private/ScopedPthreadMutexLocker.h"
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
#include <pthread.h>
|
||||
|
||||
#include "private/bionic_tls.h"
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
*/
|
||||
|
||||
#include <pthread.h>
|
||||
#include <signal.h>
|
||||
|
||||
int raise(int sig) {
|
||||
int rc = pthread_kill(pthread_self(), sig);
|
||||
|
|
48
libc/include/machine/pthread_types.h
Normal file
48
libc/include/machine/pthread_types.h
Normal file
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
* Copyright (C) 2008 The Android Open Source Project
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _MACHINE_PTHREAD_TYPES_H_
|
||||
#define _MACHINE_PTHREAD_TYPES_H_
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
typedef long pthread_t;
|
||||
|
||||
typedef struct {
|
||||
uint32_t flags;
|
||||
void* stack_base;
|
||||
size_t stack_size;
|
||||
size_t guard_size;
|
||||
int32_t sched_policy;
|
||||
int32_t sched_priority;
|
||||
#ifdef __LP64__
|
||||
char __reserved[16];
|
||||
#endif
|
||||
} pthread_attr_t;
|
||||
|
||||
#endif /* _MACHINE_PTHREAD_TYPES_H_ */
|
|
@ -29,11 +29,12 @@
|
|||
#ifndef _PTHREAD_H_
|
||||
#define _PTHREAD_H_
|
||||
|
||||
#include <time.h>
|
||||
#include <signal.h>
|
||||
#include <sched.h>
|
||||
#include <limits.h>
|
||||
#include <machine/pthread_types.h>
|
||||
#include <sched.h>
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/types.h>
|
||||
#include <time.h>
|
||||
|
||||
#if defined(__LP64__)
|
||||
#define __RESERVED_INITIALIZER , {0}
|
||||
|
@ -76,18 +77,6 @@ typedef struct {
|
|||
|
||||
#define PTHREAD_COND_INITIALIZER {0 __RESERVED_INITIALIZER}
|
||||
|
||||
typedef struct {
|
||||
uint32_t flags;
|
||||
void* stack_base;
|
||||
size_t stack_size;
|
||||
size_t guard_size;
|
||||
int32_t sched_policy;
|
||||
int32_t sched_priority;
|
||||
#ifdef __LP64__
|
||||
char __reserved[16];
|
||||
#endif
|
||||
} pthread_attr_t;
|
||||
|
||||
typedef long pthread_mutexattr_t;
|
||||
typedef long pthread_condattr_t;
|
||||
|
||||
|
@ -118,7 +107,6 @@ typedef struct {
|
|||
#endif
|
||||
|
||||
typedef int pthread_key_t;
|
||||
typedef long pthread_t;
|
||||
|
||||
typedef volatile int pthread_once_t;
|
||||
|
||||
|
@ -195,8 +183,6 @@ int pthread_join(pthread_t, void**);
|
|||
int pthread_key_create(pthread_key_t*, void (*)(void*)) __nonnull((1));
|
||||
int pthread_key_delete(pthread_key_t);
|
||||
|
||||
int pthread_kill(pthread_t, int);
|
||||
|
||||
int pthread_mutexattr_destroy(pthread_mutexattr_t*) __nonnull((1));
|
||||
int pthread_mutexattr_getpshared(const pthread_mutexattr_t*, int*) __nonnull((1, 2));
|
||||
int pthread_mutexattr_gettype(const pthread_mutexattr_t*, int*) __nonnull((1, 2));
|
||||
|
@ -236,8 +222,6 @@ int pthread_setschedparam(pthread_t, int, const struct sched_param*) __nonnull((
|
|||
|
||||
int pthread_setspecific(pthread_key_t, const void*);
|
||||
|
||||
int pthread_sigmask(int, const sigset_t*, sigset_t*);
|
||||
|
||||
typedef void (*__pthread_cleanup_func_t)(void*);
|
||||
|
||||
typedef struct __pthread_cleanup_t {
|
||||
|
|
|
@ -29,12 +29,13 @@
|
|||
#ifndef _SIGNAL_H_
|
||||
#define _SIGNAL_H_
|
||||
|
||||
#include <errno.h>
|
||||
#include <sys/cdefs.h>
|
||||
#include <limits.h> /* For LONG_BIT */
|
||||
#include <string.h> /* For memset() */
|
||||
#include <sys/types.h>
|
||||
#include <asm/sigcontext.h>
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <machine/pthread_types.h>
|
||||
#include <string.h>
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#if defined(__LP64__) || defined(__mips__)
|
||||
/* For 64-bit (and mips), the kernel's struct sigaction doesn't match the POSIX one,
|
||||
|
@ -129,6 +130,9 @@ extern int sigaltstack(const stack_t*, stack_t*);
|
|||
extern void psiginfo(const siginfo_t*, const char*);
|
||||
extern void psignal(int, const char*);
|
||||
|
||||
extern int pthread_kill(pthread_t, int);
|
||||
extern int pthread_sigmask(int, const sigset_t*, sigset_t*);
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* _SIGNAL_H_ */
|
||||
|
|
|
@ -17,6 +17,8 @@
|
|||
#ifndef LIBC_PRIVATE_KERNEL_SIGSET_T_H_
|
||||
#define LIBC_PRIVATE_KERNEL_SIGSET_T_H_
|
||||
|
||||
#include <signal.h>
|
||||
|
||||
// Our sigset_t is wrong for ARM and x86. It's 32-bit but the kernel expects 64 bits.
|
||||
// This means we can't support real-time signals correctly until we can change the ABI.
|
||||
// In the meantime, we can use this union to pass an appropriately-sized block of memory
|
||||
|
|
Loading…
Reference in a new issue