glibc/nptl/Versions
Mike Crowe afe4de7d28 nptl: Add POSIX-proposed pthread_cond_clockwait
Add:

 int pthread_cond_clockwait (pthread_cond_t *cond,
                             pthread_mutex_t *mutex,
                             clockid_t clockid,
                             const struct timespec *abstime)

which behaves just like pthread_cond_timedwait except it always measures
abstime against the supplied clockid. Currently supports CLOCK_REALTIME
and
CLOCK_MONOTONIC and returns EINVAL if any other clock is specified.

Includes feedback from many others. This function was originally
proposed[1] as pthread_cond_timedwaitonclock_np, but The Austin Group
preferred the new name.

	* nptl/Makefile: Add tst-cond26 and tst-cond27
	* nptl/Versions (GLIBC_2.30): Add pthread_cond_clockwait
	* sysdeps/nptl/pthread.h: Likewise
	* nptl/forward.c: Add __pthread_cond_clockwait
	* nptl/forward.c: Likewise
	* nptl/pthreadP.h: Likewise
	* sysdeps/nptl/pthread-functions.h: Likewise
	* nptl/pthread_cond_wait.c (__pthread_cond_wait_common): Add
	clockid parameter and comment describing why we don't need to
	check
	its value. Use that value when calling
	futex_abstimed_wait_cancelable rather than reading the clock
	from
	the flags. (__pthread_cond_wait): Pass unused clockid parameter.
	(__pthread_cond_timedwait): Read clock from flags and pass it to
	__pthread_cond_wait_common. (__pthread_cond_clockwait): Add new
	function with weak alias from pthread_cond_clockwait.
	* sysdeps/mach/hurd/i386/libpthread.abilist (GLIBC_2.30):
	* Likewise.
	* sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
	* (GLIBC_2.30): Likewise.
	* sysdeps/unix/sysv/linux/alpha/libpthread.abilist (GLIBC_2.30):
	* Likewise.
	* sysdeps/unix/sysv/linux/arm/libpthread.abilist (GLIBC_2.30):
	* Likewise.
	* sysdeps/unix/sysv/linux/csky/libpthread.abilist (GLIBC_2.30):
	* Likewise.
	* sysdeps/unix/sysv/linux/hppa/libpthread.abilist (GLIBC_2.30):
	* Likewise.
	* sysdeps/unix/sysv/linux/i386/libpthread.abilist (GLIBC_2.30):
	* Likewise.
	* sysdeps/unix/sysv/linux/ia64/libpthread.abilist (GLIBC_2.30):
	* Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
	(GLIBC_2.30): Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
	(GLIBC_2.30): Likewise.
	* sysdeps/unix/sysv/linux/microblaze/libpthread.abilist
	(GLIBC_2.30): Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
	(GLIBC_2.30): Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
	(GLIBC_2.30): Likewise.
	* sysdeps/unix/sysv/linux/nios2/libpthread.abilist (GLIBC_2.30):
	* Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
	(GLIBC_2.30): Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
	(GLIBC_2.30): Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
	(GLIBC_2.30): Likewise.
	* sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
	(GLIBC_2.30): Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
	(GLIBC_2.30): Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
	(GLIBC_2.30): Likewise.
	* sysdeps/unix/sysv/linux/sh/libpthread.abilist (GLIBC_2.30):
	* Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
	(GLIBC_2.30): Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
	(GLIBC_2.30): Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
	(GLIBC_2.30): Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
	(GLIBC_2.30): Likewise.
	* nptl/tst-cond11.c (run_test): Support testing
	pthread_cond_clockwait too by using a special magic
	CLOCK_USE_ATTR_CLOCK value to determine whether to call
	pthread_cond_timedwait or pthread_cond_clockwait. (do_test):
	Pass
	CLOCK_USE_ATTR_CLOCK for existing tests, and add new tests using
	all combinations of CLOCK_MONOTONIC and CLOCK_REALTIME.
	* ntpl/tst-cond26.c: New test for passing unsupported and
	* invalid
	clocks to pthread_cond_clockwait.
	* nptl/tst-cond27.c: Add test similar to tst-cond5.c, but using
	struct timespec and pthread_cond_clockwait.
	* manual/threads.texi: Document pthread_cond_clockwait. The
	* comment
	was provided by Carlos O'Donell.

[1] https://sourceware.org/ml/libc-alpha/2015-07/msg00193.html

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
2019-07-12 13:36:24 +00:00

292 lines
8.3 KiB
Plaintext

libc {
GLIBC_2.0 {
pthread_attr_destroy; pthread_attr_init;
pthread_attr_getdetachstate; pthread_attr_setdetachstate;
pthread_attr_getinheritsched; pthread_attr_setinheritsched;
pthread_attr_getschedparam; pthread_attr_setschedparam;
pthread_attr_getschedpolicy; pthread_attr_setschedpolicy;
pthread_attr_getscope; pthread_attr_setscope;
pthread_condattr_destroy; pthread_condattr_init;
pthread_cond_broadcast; pthread_cond_destroy;
pthread_cond_init; pthread_cond_signal; pthread_cond_wait;
pthread_cond_timedwait;
pthread_equal; pthread_exit;
pthread_getschedparam; pthread_setschedparam;
pthread_mutex_destroy; pthread_mutex_init;
pthread_mutex_lock; pthread_mutex_unlock;
pthread_self;
pthread_setcancelstate; pthread_setcanceltype;
}
GLIBC_2.1 {
pthread_attr_init;
}
GLIBC_2.3.2 {
__register_atfork;
# Changed pthread_cond_t.
pthread_cond_init; pthread_cond_destroy;
pthread_cond_wait; pthread_cond_signal;
pthread_cond_broadcast; pthread_cond_timedwait;
}
# C11 thread symbols.
GLIBC_2.28 {
thrd_current; thrd_equal; thrd_sleep; thrd_yield;
}
GLIBC_PRIVATE {
__libc_alloca_cutoff;
# Internal libc interface to libpthread
__libc_dl_error_tsd;
__libc_pthread_init;
__libc_current_sigrtmin_private; __libc_current_sigrtmax_private;
__libc_allocate_rtsig_private;
}
}
libpthread {
GLIBC_2.0 {
pthread_create; pthread_join; pthread_self; pthread_equal;
pthread_exit; pthread_detach;
pthread_getschedparam; pthread_setschedparam;
pthread_attr_init; pthread_attr_destroy;
pthread_attr_getdetachstate; pthread_attr_setdetachstate;
pthread_attr_getschedparam; pthread_attr_setschedparam;
pthread_attr_getschedpolicy; pthread_attr_setschedpolicy;
pthread_attr_getinheritsched; pthread_attr_setinheritsched;
pthread_attr_getscope; pthread_attr_setscope;
pthread_mutex_init; pthread_mutex_destroy;
pthread_mutex_lock; pthread_mutex_trylock; pthread_mutex_unlock;
pthread_mutexattr_init; pthread_mutexattr_destroy;
pthread_cond_init; pthread_cond_destroy;
pthread_cond_wait; pthread_cond_timedwait;
pthread_cond_signal; pthread_cond_broadcast;
pthread_condattr_destroy; pthread_condattr_init;
pthread_cancel; pthread_testcancel;
pthread_setcancelstate; pthread_setcanceltype;
pthread_sigmask; pthread_kill;
pthread_key_create; pthread_key_delete;
pthread_getspecific; pthread_setspecific;
pthread_once;
pthread_atfork;
flockfile; funlockfile; ftrylockfile;
# Non-standard POSIX1.x functions.
pthread_mutexattr_getkind_np; pthread_mutexattr_setkind_np;
# Protected names for functions used in other shared objects.
__pthread_mutex_init; __pthread_mutex_destroy;
__pthread_mutex_lock; __pthread_mutex_trylock; __pthread_mutex_unlock;
__pthread_mutexattr_init; __pthread_mutexattr_destroy;
__pthread_mutexattr_settype;
__pthread_key_create; __pthread_getspecific; __pthread_setspecific;
__pthread_once; __pthread_atfork;
_IO_flockfile; _IO_ftrylockfile; _IO_funlockfile;
# Semaphores.
sem_destroy; sem_getvalue; sem_init; sem_post; sem_trywait; sem_wait;
# Special fork handling.
fork; __fork;
# Cancellation points.
close; __close; fcntl; __fcntl; read; __read; write; __write; accept;
connect; __connect; recv; recvfrom; recvmsg; send; __send; sendmsg; sendto;
fsync; lseek; __lseek; msync; nanosleep; open; __open; pause; tcdrain;
system; wait; __wait; waitpid;
# Hidden entry point (through macros).
_pthread_cleanup_push; _pthread_cleanup_pop;
_pthread_cleanup_push_defer; _pthread_cleanup_pop_restore;
pthread_kill_other_threads_np;
# The error functions.
__errno_location; __h_errno_location;
# Functions which previously have been overwritten.
sigwait; sigaction; __sigaction; _exit; _Exit; longjmp; siglongjmp;
raise;
}
GLIBC_2.1 {
pthread_create;
pthread_attr_init;
pthread_attr_getguardsize; pthread_attr_setguardsize;
pthread_attr_getstackaddr; pthread_attr_setstackaddr;
pthread_attr_getstacksize; pthread_attr_setstacksize;
pthread_mutexattr_gettype; pthread_mutexattr_settype;
pthread_rwlock_init; pthread_rwlock_destroy;
pthread_rwlock_rdlock; pthread_rwlock_wrlock; pthread_rwlock_unlock;
pthread_rwlock_tryrdlock; pthread_rwlock_trywrlock;
pthread_rwlockattr_init; pthread_rwlockattr_destroy;
pthread_rwlockattr_getpshared; pthread_rwlockattr_setpshared;
pthread_rwlockattr_getkind_np; pthread_rwlockattr_setkind_np;
pthread_getconcurrency; pthread_setconcurrency;
# Semaphores.
sem_destroy; sem_getvalue; sem_init; sem_post; sem_trywait; sem_wait;
__libc_current_sigrtmin; __libc_current_sigrtmax;
__libc_allocate_rtsig;
}
GLIBC_2.1.1 {
sem_close; sem_open; sem_unlink;
}
GLIBC_2.1.2 {
__libpthread_version_placeholder;
}
GLIBC_2.2 {
pthread_mutexattr_getpshared; pthread_mutexattr_setpshared;
pthread_condattr_getpshared; pthread_condattr_setpshared;
# New functions from IEEE Std. 1003.1-2001.
pthread_mutex_timedlock;
pthread_rwlock_timedrdlock; pthread_rwlock_timedwrlock;
pthread_attr_getstack; pthread_attr_setstack;
pthread_spin_destroy; pthread_spin_init; pthread_spin_lock;
pthread_spin_trylock; pthread_spin_unlock;
pthread_barrier_init; pthread_barrier_destroy; pthread_barrier_wait;
pthread_barrierattr_destroy; pthread_barrierattr_init;
pthread_barrierattr_setpshared;
sem_timedwait;
pthread_yield;
pthread_getcpuclockid;
# Cancellation points.
lseek64; open64; __open64; pread; pread64; __pread64; pwrite; pwrite64;
__pwrite64;
# Names used internally.
__pthread_rwlock_init; __pthread_rwlock_destroy;
__pthread_rwlock_rdlock; __pthread_rwlock_tryrdlock;
__pthread_rwlock_wrlock; __pthread_rwlock_trywrlock;
__pthread_rwlock_unlock;
__res_state;
}
GLIBC_2.2.3 {
# Extensions.
pthread_getattr_np;
}
GLIBC_2.2.6 {
# Cancellation wrapper
__nanosleep;
}
GLIBC_2.3.2 {
# Changed pthread_cond_t.
pthread_cond_init; pthread_cond_destroy;
pthread_cond_wait; pthread_cond_timedwait;
pthread_cond_signal; pthread_cond_broadcast;
}
GLIBC_2.3.3 {
# 1003.1-2001 function accidentally left out in 2.2.
pthread_barrierattr_getpshared;
# Unix CS option.
pthread_condattr_getclock; pthread_condattr_setclock;
# Proposed API extensions.
pthread_tryjoin_np; pthread_timedjoin_np;
# New cancellation cleanup handling.
__pthread_register_cancel; __pthread_unregister_cancel;
__pthread_register_cancel_defer; __pthread_unregister_cancel_restore;
__pthread_unwind_next;
__pthread_cleanup_routine;
# affinity interfaces without size parameter
pthread_getaffinity_np; pthread_setaffinity_np;
pthread_attr_getaffinity_np; pthread_attr_setaffinity_np;
}
GLIBC_2.3.4 {
# New affinity interfaces.
pthread_getaffinity_np; pthread_setaffinity_np;
pthread_attr_getaffinity_np; pthread_attr_setaffinity_np;
pthread_setschedprio;
}
GLIBC_2.4 {
pthread_mutexattr_getrobust_np; pthread_mutexattr_setrobust_np;
pthread_mutex_consistent_np;
pthread_mutexattr_getprotocol; pthread_mutexattr_setprotocol;
pthread_mutexattr_getprioceiling; pthread_mutexattr_setprioceiling;
pthread_mutex_getprioceiling; pthread_mutex_setprioceiling;
};
GLIBC_2.11 {
pthread_sigqueue;
};
GLIBC_2.12 {
pthread_mutex_consistent; pthread_mutexattr_getrobust;
pthread_mutexattr_setrobust;
pthread_setname_np; pthread_getname_np;
};
GLIBC_2.18 {
pthread_getattr_default_np;
pthread_setattr_default_np;
}
GLIBC_2.20 {
}
GLIBC_2.22 {
}
# C11 thread symbols.
GLIBC_2.28 {
thrd_create; thrd_detach; thrd_exit; thrd_join;
mtx_init; mtx_lock; mtx_timedlock; mtx_trylock; mtx_unlock; mtx_destroy;
call_once; cnd_broadcast; cnd_destroy; cnd_init; cnd_signal;
cnd_timedwait; cnd_wait; tss_create; tss_delete; tss_get; tss_set;
}
GLIBC_2.30 {
sem_clockwait; pthread_cond_clockwait;
}
GLIBC_PRIVATE {
__pthread_initialize_minimal;
__pthread_clock_gettime; __pthread_clock_settime;
__pthread_unwind; __pthread_get_minstack;
__pthread_barrier_init; __pthread_barrier_wait;
__shm_directory;
__libpthread_freeres;
}
}