History log of /bionic/tools/versioner/current/pthread.h
Revision Date Author Comments
0d5906594d82ec52cd97818aff8be7749ecc23dd 09-Mar-2017 Tom Cherry <tomcherry@google.com> Create PTHREAD_COND_INITIALIZER_MONOTONIC_NP

Needed for std::condition_variable to wait on CLOCK_MONOTONIC.

Bug: 35756266
Bug: 73951740
Test: boot bullhead
Change-Id: I32a30817f0ec2190393fcc6faec45b40822cba32
(cherry picked from commit f0f3d2f002aa23ded26cf2c02260ceee92ce790e)
76f78fc70953959086f8e37a483fe9107c1e0236 05-Mar-2018 Tom Cherry <tomcherry@google.com> Add _monotonic_np versions of timed wait functions

As a follow up to Ibba98f5d88be1c306d14e9b9366302ecbef6d534, where we
added a work around to convert the CLOCK_REALTIME timeouts to
CLOCK_MONOTONIC for pthread and semaphore timed wait functions, we're
introducing a set of _monotonic_np versions of each of these functions
that wait on CLOCK_MONOTONIC directly.

The primary motivation here is that while the above work around helps
for 3rd party code, it creates a dilemma when implementing new code
that would use these functions: either one implements code with these
functions knowing there is a race condition possible or one avoids
these functions and reinvent their own waiting/signaling mechanisms.
Neither are satisfactory, so we create a third option to use these
Android specific _monotonic_np functions that completely remove the
race condition while keeping the rest of the interface.

Specifically this adds the below functions:
pthread_mutex_timedlock_monotonic_np()
pthread_cond_timedwait_monotonic_np()
pthread_rwlock_timedrdlock_monotonic_np()
pthread_rwlock_timedwrlock_monotonic_np()
sem_timedwait_monotonic_np()

Note that pthread_cond_timedwait_monotonic_np() previously existed and
was removed since it's possible to initialize a condition variable to
use CLOCK_MONOTONIC. It is added back for a mix of reasons,
1) Symmetry with the rest of the functions we're adding
2) libc++ cannot easily take advantage of the new initializer, but
will be able to use this function in order to wait on
std::steady_clock
3) Frankly, it's a better API to specify the clock in the waiter function
than to specify the clock when the condition variable is
initialized.

Bug: 73951740
Test: new unit tests
Change-Id: I23aa5c204e36a194237d41e064c5c8ccaa4204e3
cc0fe6e8c0bb2dfb250522872be6facb4d4a0339 30-Jan-2018 Elliott Hughes <enh@google.com> The future is now (2018 edition).

Bug: N/A
Test: builds
Change-Id: Ic638e5b1f4e5901885fe7bc60b2a265817636b21
6b9c85b36d2e69b45d780e6a0b27d64909311a7e 23-Jan-2018 Yabin Cui <yabinc@google.com> Support priority inheritance mutex in 64bit programs.

Bug: http://b/29177606
Test: run bionic-unit-tests on walleye.
Test: run bionic-unit-tests-glibc on host.
Change-Id: Iac349284aa73515f384e7509445f87434757f59e
8aecba7aa6b7f7b92f69c0d3febef59fdb135f87 18-Oct-2017 Elliott Hughes <enh@google.com> Implement pthread_attr_getinheritsched/pthread_attr_setinheritsched.

Historically, Android defaulted to EXPLICIT but with a special case
because SCHED_NORMAL/priority 0 was awkward. Because the code couldn't
actually tell whether SCHED_NORMAL/priority 0 was a genuine attempt to
explicitly set those attributes (because the parent thread is SCHED_FIFO,
say) or just because the pthread_attr_t was left at its defaults.

Now we support INHERIT, we could call sched_getscheduler to see whether
we actually need to call sched_setscheduler, but since the major cost
is the fixed syscall overhead, we may as well just conservatively
call sched_setscheduler and let the kernel decide whether it's a
no-op. (Especially because we'd then have to add both sched_getscheduler
and sched_setscheduler to any seccomp filter.)

Platform code (or app code that only needs to support >= P) can actually
add a call to pthread_attr_setinheritsched to say that they just want
to inherit (if they know that none of their threads actually mess with
scheduler attributes at all), which will save them a sched_setscheduler
call except in the doubly-special case of SCHED_RESET_ON_FORK (which we
do handle).

An alternative would be "make pthread_attr_setschedparams and
pthread_attr_setschedprio set EXPLICIT and change the platform default
to INHERIT", but even though I can only think of weird pathological
examples where anyone would notice that change, that behavior -- of
pthread_attr_setschedparams/pthread_attr_setschedprio overriding an
earlier call to pthread_attr_setinheritsched -- isn't allowed by POSIX
(whereas defaulting to EXPLICIT is).

If we have a lot of trouble with this change in the app compatibility
testing phase, though, we'll want to reconsider this decision!

-*-

This change also removes a comment about setting the scheduler attributes
in main_thread because we'd have to actually keep them up to date,
and it's not clear that doing so would be worth the trouble.

Also make async_safe_format_log preserve errno so we don't have to be
so careful around it.

Bug: http://b/67471710
Test: ran tests
Change-Id: Idd026c4ce78a536656adcb57aa2e7b2c616eeddf
dff08ced5685a0d1adb0ef875a15caca99556e1e 16-Oct-2017 Elliott Hughes <enh@google.com> Add pthread_setschedprio.

Bug: http://b/26204555
Test: ran tests
Change-Id: Ic34062b9b6036a1ce2642a069514bab48a893338
ff26a16c1de7be696719e9001f0707b7c55b52cf 18-Aug-2017 Elliott Hughes <enh@google.com> Re-submit "Name function arguments in libc headers for Studio."

This reverts commit 9af9120091ceb96641d7c6c645fabad96db4bc0d (a revert
of 079bff4fa52b0c3c76057451cc9cdecf1827fce0), now the versioner bug is
fixed.

Bug: http://b/64613623 # header bug
Bug: http://b/64802958 # versioner bug
Change-Id: I1cb9d7832d4b3aecdc57a9285e2291443e59d02d
9af9120091ceb96641d7c6c645fabad96db4bc0d 17-Aug-2017 Colin Cross <ccross@android.com> Revert "Name function arguments in libc headers for Studio."

This reverts commit 079bff4fa52b0c3c76057451cc9cdecf1827fce0.

Broke builds with SANITIZE_HOST=address with an asan failure in versioner.

Change-Id: I22b113fd5405589d1a25e5e137c450aaba1ade5f
079bff4fa52b0c3c76057451cc9cdecf1827fce0 17-Aug-2017 Elliott Hughes <enh@google.com> Name function arguments in libc headers for Studio.

Second batch of headers...

Bug: http://b/64613623
Test: builds
Change-Id: I8eef043dbf32afee8ff814e9d005f46aee8fa21f
0138c46794a0fde58cf864a51ad73d77739c074d 07-Aug-2017 Elliott Hughes <enh@google.com> Remove reference to non-existent __LP32__.

Since there is no 64-bit before 21, there's no need for us to talk about
bitness at all.

Bug: https://github.com/android-ndk/ndk/issues/481
Test: builds
Change-Id: I307466997df35d7f1d0eef7dc7cb35ac3033d25d
3f66e74b903905e763e104396aff52a81718cfde 01-Aug-2017 Elliott Hughes <enh@google.com> Remove nullability specifications.

Bug: http://b/64251432
Test: builds
Change-Id: I5b1613484783f7478d30b5e694007f77fa626659
c2ce12046c74613da2c41e1cce876db6ce81d4a9 22-Jun-2017 Dan Albert <danalbert@google.com> Put back more legacy pthread APIs.

Test: make checkbuild
Bug: https://github.com/android-ndk/ndk/issues/423
Bug: https://stackoverflow.com/q/44580542/632035
Change-Id: Ibf52a969afffbfcdf6793a0bf8b0e10bbdd1f32c
8c67f1e617357cad075874598702bf9a9c8e8200 12-Jun-2017 Dan Albert <danalbert@google.com> Expose pthread_mutex_lock_timeout_np to the NDK.

The proper API for this isn't available until L, so expose this for
API levels earlier than that.

Test: make checkbuild
Bug: https://github.com/android-ndk/ndk/issues/420
Change-Id: I382b8f557be9530f3e13aaae353b4a6e7f9301ab
cfb61712c4367c2943f1b4fb7838d5e125020bef 20-Apr-2017 Josh Gao <jmgao@google.com> The future is now.

__INTRODUCED_IN_FUTURE -> __INTRODUCED_IN(26)

Bug: http://b/37437368
Test: treehugger
Change-Id: I601a23da83b65a0cd582cc840ed3856a9031b673
(cherry picked from commit cb302f932a3532f1484e1e70894e9b1199384283)

(Cherry picked a DO N*T MERGE commit that should have been merged)
(cherry picked from commit 2e8e5e60b6ecbcfe2110242e41b9ec5340b11cf5)
2e8e5e60b6ecbcfe2110242e41b9ec5340b11cf5 20-Apr-2017 Josh Gao <jmgao@google.com> DO NOT MERGE: The future is now.

__INTRODUCED_IN_FUTURE -> __INTRODUCED_IN(26)

Bug: http://b/37437368
Test: treehugger
Change-Id: I601a23da83b65a0cd582cc840ed3856a9031b673
(cherry picked from commit cb302f932a3532f1484e1e70894e9b1199384283)
cb302f932a3532f1484e1e70894e9b1199384283 20-Apr-2017 Josh Gao <jmgao@google.com> The future is now.

__INTRODUCED_IN_FUTURE -> __INTRODUCED_IN(26)

Bug: http://b/37437368
Test: treehugger
Change-Id: I601a23da83b65a0cd582cc840ed3856a9031b673
468a5d2d83a3d719f7493d041abc69587756d8fa 21-Mar-2017 Elliott Hughes <enh@google.com> pthread barrier and spinlock types should only appear at API level 24.

Bug: https://github.com/android-ndk/ndk/issues/336
Test: builds
Change-Id: I938d9d7ea879d1dbc355f14e100f1ea31a51a1f0
95fa061678400315ee757758bf5f9146176d47a0 28-Sep-2016 Elliott Hughes <enh@google.com> Rename __pure, __pure2, and __purefunc.

These names were pretty misleading (aka "backwards"), so switch to the
same obvious names glibc uses.

Test: build.
Change-Id: Ia98c9dbbccd0820386116562347654e84669034a
280236537e06c7accaffabf8fb407f93dd1c834f 12-Aug-2016 Elliott Hughes <enh@google.com> POSIX says <sys/types.h> should make all the pthread_* types available.

http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_types.h.html

Change-Id: I606194e15ceaa3129f266a9a460c358eaa8bf686
02ac028bf7899f293a39e991f346fd35e2910949 12-Aug-2016 Elliott Hughes <enh@google.com> Fix pthread_barrierattr_getpshared prototype.

As http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_barrierattr_getpshared.html
is my witness, there's a missing `const` here.

Change-Id: Ifd68188fb952460b64d144bdc21a53bc40ed82a7
5470c183611737af5ec954984e4bdb5da8c99b73 22-Jul-2016 Elliott Hughes <enh@google.com> Make it possible to build bionic with -I instead of -isystem.

Various things:

* work around -Wnullability-completeness.
* use C++ casts in C++ and C casts in C.
* stop using attributes clang doesn't support (such as `warning`).
* remove duplicate definitions of XATTR_CREATE and XATTR_REPLACE.

Change-Id: I07649e46275b28a23ca477deea119fe843999533
46b44160e9e4c466be0faf1bb8d6ec70ecc83273 27-May-2016 Josh Gao <jmgao@google.com> Update header versions for NDK platform fixes.

Bug: http://b/28178111
Change-Id: Icd638673b409aa43a91490f77c6b4d79c9ea20d9
e2f25831eba8dcbb57aebbf50c463d4473c7df30 09-May-2016 Elliott Hughes <enh@google.com> Remove declaration of pthread_cond_timedwait_relative_np.

It's been deprecated long enough, and nothing left in the tree (except
code that isn't even built) is still using it.

Bug: http://b/27918161
Change-Id: Ibf824c1063d49484037de5c03b98bec5bdd4dcf6
3164ab733ccdcd5c900d0f1ed1a0dbbb11ad61a2 07-May-2016 Elliott Hughes <enh@google.com> Remove pthread_mutex_lock_timeout_np from <pthread.h>.

It's been deprecated long enough, and nothing left in the tree (except
code that isn't even built) is still using it.

Bug: http://b/27918161
Change-Id: I1786f5e2528a23c17b3f7298f4ba5fc7761a26c5
baa2a973bd776a51bb05a8590ab05d86eea7b321 14-Aug-2015 Dan Albert <danalbert@google.com> Use clang's nullability instead of nonnull.

http://clang.llvm.org/docs/AttributeReference.html#nonnull

_Nonnull is similar to the nonnull attribute in that it will instruct
compilers to warn the user if it can prove that a null argument is
being passed. Unlike the nonnull attribute, this annotation indicated
that a value *should not* be null, not that it *cannot* be null, or
even that the behavior is undefined. The important distinction is that
the optimizer will perform surprising optimizations like the
following:

void foo(void*) __attribute__(nonnull, 1);

int bar(int* p) {
foo(p);

// The following null check will be elided because nonnull
// attribute means that, since we call foo with p, p can be
// assumed to not be null. Thus this will crash if we are called
// with a null pointer.
if (src != NULL) {
return *p;
}
return 0;
}

int main() {
return bar(NULL);
}

Note that by doing this we are no longer attaching any sort of
attribute for GCC (GCC doesn't support attaching nonnull directly to a
parameter, only to the function and naming the arguments
positionally). This means we won't be getting a warning for this case
from GCC any more. People that listen to warnings tend to use clang
anyway, and we're quickly moving toward that as the default, so this
seems to be an acceptable tradeoff.

Change-Id: Ie05fe7cec2f19a082c1defb303f82bcf9241b88d
34c599a8b0b04f66b065c4d84b809f74dd44382d 29-Apr-2016 Josh Gao <jmgao@google.com> Add __INTRODUCED_IN_FUTURE for unreleased APIs.

Future API levels aren't known (e.g. 25 could be a maintenance release
of N that doesn't contain any bionic updates), so use a placeholder
macro that we can find and replace with the actual API level before each
release.

Bug: http://b/28178111
Change-Id: I667fe53ea1ac49b64135170fc30d5dbe9df94e29
14adff1cfa06a3d4d3281a9bf7848b556d84c20d 29-Apr-2016 Josh Gao <jmgao@google.com> Add versioning information to symbols.

Bug: http://b/28178111
Change-Id: I46bf95accd819f4521afb1173d8badcc5e9df31c
3615a521265271acb02c30e2ab021969852b77c8 28-Apr-2016 Elliott Hughes <enh@google.com> Remove declaration of pthread_cond_timeout_np.

Bug: http://b/27918161
Change-Id: I61b5710dc394c155bdb4577a750b96195033251e
96583dcf95ba51c3ac51ef65c2172be1b2696431 30-Mar-2016 Elliott Hughes <enh@google.com> Stop defining HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE.

Bug: http://b/27918161
Change-Id: I21d4dfa4636aa06a93b3c8a215113f66f37f0bc7
cc78b252d113229f44550b1158f0fc67439d0184 24-Mar-2016 Elliott Hughes <enh@google.com> Remove the __USE_GNU guard from pthread_setname_np again.

Caused build breakage, but not spotted by TreeHugger:

external/libnfc-nxp/Linux_x86/phDal4Nfc.c:737:5: error: implicit declaration of function 'pthread_setname_np' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
pthread_setname_np(pthread_self(), "reader");
^

Nice file name.

Change-Id: I102e55718babf4e4f2f2c64066c6a83ed3ac86d3
725b2a96a70c6570a1fb84562fe46348414752cd 23-Mar-2016 Elliott Hughes <enh@google.com> Add pthread_getname_np.

Also guard both these GNU extensions with _GNU_SOURCE.

Also improve the tests to test each case on both the current thread and
another thread, since the code paths are totally different.

Bug: http://b/27810459
Change-Id: I72b05bca5c5b6ca8ba4585b8edfb716a1c252f92
5704c423c81790195161c1757ae79da188590c51 26-Jan-2016 Elliott Hughes <enh@google.com> Implement POSIX lockf.

This has been requested a few times over the years. This is basically
a very late rebase of https://android-review.googlesource.com/45470
which was abandoned years ago. One addition is that this version has
_FILE_OFFSET_BITS=64 support.

POSIX puts this in <unistd.h>. glibc also has it in <fcntl.h>.

Bug: http://b/13077650
Change-Id: I5862b1dc326e326c01ad92438ecc1578d19ba739
fe3a83a9343f0e4ff654f09ef8ffc8a773c7c105 18-Nov-2015 Yabin Cui <yabinc@google.com> Implement pthread spin.

In order to run tsan unit tests, we need to support pthread spin APIs.

Bug: 18623621
Bug: 25392375
Change-Id: Icbb4a74e72e467824b3715982a01600031868e29
e7c2fffa16eccecfd43d99516751a43776f5f609 06-Nov-2015 Yabin Cui <yabinc@google.com> Implement pthread barrier.

Bug: 24341262
Change-Id: I5472549e5d7545c1c3f0bef78235f545557b9630
2b028f5ce47b8d27ca6d3b86e135f7d9b0359547 23-Jun-2015 Elliott Hughes <enh@google.com> Fix bad merge of 64e9e71cdb7d88397e510e1986d494b797ed3b45.

Bug: http://b/22029751
Change-Id: I6245fe5f274c9af8a632da5eebe50cf9fe29dc4a
64e9e71cdb7d88397e510e1986d494b797ed3b45 12-Jun-2015 Sharvil Nanavati <sharvil@google.com> Define nonportable pthread mutex macros with the _NP suffix.

Change-Id: I1066352e5b2607f64daf6aeb0030d0bbe88ead8d
60907c7f4ec788def8741e4efb933eafb6560eaa 10-Jun-2015 Christopher Ferris <cferris@google.com> Allow NULL in pthread_mutex_lock/unlock.

The pthread_mutex_lock and pthread_mutex_unlock were allowed to
fail silently on L 32 bit devices when passed a NULL. We changed
this to a crash on 32 bit devices, but there are still games that make
these calls and are not likely to be updated. Therefore, once again
allow NULL to be passed in on 32 bit devices.

Bug: 19995172
(cherry picked from commit 511cfd9dc8cb41bca4920687c7d816ee916ee8e5)

Change-Id: I159a99a941cff94297ef3fffda7075f8ef1ae252
511cfd9dc8cb41bca4920687c7d816ee916ee8e5 10-Jun-2015 Christopher Ferris <cferris@google.com> Allow NULL in pthread_mutex_lock/unlock.

The pthread_mutex_lock and pthread_mutex_unlock were allowed to
fail silently on L 32 bit devices when passed a NULL. We changed
this to a crash on 32 bit devices, but there are still games that make
these calls and are not likely to be updated. Therefore, once again
allow NULL to be passed in on 32 bit devices.

Bug: 19995172
Change-Id: If7e8860075ecd63c0064d80f64e226fad7bd3c26
76615dae93c18ac890e167c547a08c0228709a33 17-Mar-2015 Yabin Cui <yabinc@google.com> Provide writer preference option in rwlock.

Previous implementation of rwlock contains four atomic variables, which
is hard to maintain and change. So I make following changes in this CL:

1. Add pending flags in rwlock.state, so we don't need to synchronize
between different atomic variables. Using compare_and_swap operations
on rwlock.state is enough for all state change.

2. Add pending_lock to protect readers/writers waiting and wake up
operations. As waiting/wakeup is not performance critical, using a
lock is easier to maintain.

3. Add writer preference option.

4. Add unit tests for rwlock.

Bug: 19109156

Change-Id: Idcaa58d695ea401d64445610b465ac5cff23ec7c
377243b78c43ffc98a6c9f145a6cd27ab99c08f0 26-Mar-2015 Yabin Cui <yabinc@google.com> Remove PTHREAD_RECURSIVE_MUTEX_INITIALIZER and PTHREAD_ERRORCHECK_MUTEX_INITIALIZER.

These macros are also not used in glibc. And we should use
PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
and PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP instead.

Change-Id: I35195e2f499712dcde9305bbb93622d0f7ca874b
17393b06bab9cb3e95d0f466a56c746de19b8eee 21-Mar-2015 Yabin Cui <yabinc@google.com> Hide internal of pthread_mutex_t.

Bug: 19249079
Change-Id: Iffb79c8d861b698d474f212dc80c638fc2cf1620
b58457221364eaad039c2c49a42626b725e980d5 17-Mar-2015 Yabin Cui <yabinc@google.com> Add test for pthread types alignment check.

Bug: 19249079
Change-Id: I83c4f0d11ec5d82a346ae0057d02a92bb1d519e8
b3ac2145f4a4cab52d016601edd18f7789089e41 17-Mar-2015 Dmitriy Ivanov <dimitry@google.com> Fix build: align pthread_cond_t to sizeof(long)

(cherry picked from commit b5cd3c7a7503d8155ea17424c00f7e77603252c0)

Change-Id: I69d8feeda2c8e0423c5626bcd40914e7eb9d85e4
b5cd3c7a7503d8155ea17424c00f7e77603252c0 17-Mar-2015 Dmitriy Ivanov <dimitry@google.com> Fix build: align pthread_cond_t to sizeof(long)

Change-Id: Ieaee6d09089b161ec516ba22cafaee1ecb4342da
eb8b122d67db501729ecde4fcb960336c87af4ce 17-Mar-2015 Christopher Ferris <cferris@google.com> Add alignment to opaque types.

If there is no alignment forced, then the compiler might put these
structures at any alignment.

Change-Id: I6416db72433504e0ec1178bfae6f5b18b6e363fb
32651b8e8e453391c7aaca47cd885e94d54d0bf4 14-Mar-2015 Yabin Cui <yabinc@google.com> Hide content of pthread_cond_t in pthread_cond_internal_t.

Bug: 19249079
Change-Id: I6f55af30bcd6211ce71630c6cacbef0e1663dcee
2fabea47ac9475bcc52aff0715819d18aa5bdf1d 13-Mar-2015 Yabin Cui <yabinc@google.com> Hide content of pthread_rwlock_t in pthread_rwlock_internal_t.

Bug: 19249079
Change-Id: Ifbe634c716b6793bef897ec5134b55eb44c6b8d5
08ee8d2030fbc73c4c144e819dd68806b0351cbe 12-Feb-2015 Yabin Cui <yabinc@google.com> Switch pthread_rwlock_t to stdatomic.

Bug: 19099838
Change-Id: Ie82967a60b5cec61a8bdd1e0e4a03738d01944f8
e5f816c01780220880ee59a29f727c48b51365d3 29-Jan-2015 Yabin Cui <yabinc@google.com> Switch pthread_cond_t to <stdatomic.h>.

Bug: 17574458
Change-Id: Ic7f79861df4fe751cfa6c6b20b71123cc31e7114
86fc96f73311f43980df770f4ff8022f1e9b296a 30-Jan-2015 Yabin Cui <yabinc@google.com> Switch pthread_mutex_t from bionic atomics to <stdatomic.h>.

Bug: 17574456
Change-Id: I5ce3d3dc07e804e9ce55c42920f47531b56e04de
80e6d6d825df4616808b22b5639114566c27af0e 24-Jan-2015 Yabin Cui <yabinc@google.com> Switch pthread_once_t to stdatomic.h.

Bug: 17574610

Change-Id: I653f2aa4b5b38dbdaffe4a6c3deccfe6ad3b0e74
212e0e38248860b151b28877225629a988d95b58 02-Dec-2014 Elliott Hughes <enh@google.com> Build our benchmarks against glibc too.

Bug: 18556607
Change-Id: I455ac8b93c0835836180e549486bc52d393ee6a6
75ef63d6cf83787233d1c45489c4ec03b0a67d16 21-Nov-2014 Dan Albert <danalbert@google.com> 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
3d773274ad6caaf7e0431c3d5eeb31f727b53d1a 08-Oct-2014 Elliott Hughes <enh@google.com> Revert "Work around a bug in Immersion's libImmEmulatorJ.so."

This reverts commit 7d3f553f989f830976efa92ddc3c84661d4d42aa.

Change-Id: I8909b6aa1d97e9a61dbe95a2d91b9fbe336b58f0
1543fdf616ddebee7819214437527f380e5c743b 08-Oct-2014 Elliott Hughes <enh@google.com> Work around a bug in Immersion's libImmEmulatorJ.so.

This library calls pthread_mutex_lock and pthread_mutex_unlock with a NULL
pthread_mutex_t*. This gives them (and their users) one release to fix things.

Bug: 17443936

(cherry picked from commit 7d3f553f989f830976efa92ddc3c84661d4d42aa)

Change-Id: Ie26bbecd3a74d61113b51c18832872499b97ee86
(cherry picked from commit b5e7eba6d1b97e471996fcfe7dbde7cbba7512ef)
b5e7eba6d1b97e471996fcfe7dbde7cbba7512ef 08-Oct-2014 Elliott Hughes <enh@google.com> Work around a bug in Immersion's libImmEmulatorJ.so.

This library calls pthread_mutex_lock and pthread_mutex_unlock with a NULL
pthread_mutex_t*. This gives them (and their users) one release to fix things.

Bug: 17443936

(cherry picked from commit 7d3f553f989f830976efa92ddc3c84661d4d42aa)

Change-Id: Ie26bbecd3a74d61113b51c18832872499b97ee86
7d3f553f989f830976efa92ddc3c84661d4d42aa 08-Oct-2014 Elliott Hughes <enh@google.com> Work around a bug in Immersion's libImmEmulatorJ.so.

This library calls pthread_mutex_lock and pthread_mutex_unlock with a NULL
pthread_mutex_t*. This gives them (and their users) one release to fix things.

Bug: 17443936
Change-Id: I3b63c9a3dd63db0833f21073e323b3236a13b47a
a4831cb4a3f44b93788488db8ff9ea76613f0355 12-Sep-2014 Elliott Hughes <enh@google.com> Add pthread_gettid_np and re-expose __get_thread for LP32.

A lot of third-party code calls the private __get_thread symbol,
often as part of a backport of bionic's pthread_rwlock implementation.
Hopefully this will go away for LP64 (since you're guaranteed the
real implementation there), but there are still APIs that take a tid
and no way to convert between a pthread_t and a tid. pthread_gettid_np
is a public API for that. To aid the transition, make __get_thread
available again for LP32.

(cherry-pick of 27efc48814b8153c55cbcd0af5d9add824816e69.)

Bug: 14079438
Change-Id: I43fabc7f1918250d31d4665ffa4ca352d0dbeac1
27efc48814b8153c55cbcd0af5d9add824816e69 12-Sep-2014 Elliott Hughes <enh@google.com> Add pthread_gettid_np and re-expose __get_thread for LP32.

A lot of third-party code calls the private __get_thread symbol,
often as part of a backport of bionic's pthread_rwlock implementation.
Hopefully this will go away for LP64 (since you're guaranteed the
real implementation there), but there are still APIs that take a tid
and no way to convert between a pthread_t and a tid. pthread_gettid_np
is a public API for that. To aid the transition, make __get_thread
available again for LP32.

Bug: 14079438
Change-Id: I43fabc7f1918250d31d4665ffa4ca352d0dbeac1
b27a840f4b520bfa095db99b0a2e5205634b0003 11-Jun-2014 Elliott Hughes <enh@google.com> Add __pure2 to a few more functions, most notably gettid and pthread_self.

Change-Id: I7eee9f26f45130038af09d8285782b07f70a996f
92687e41bcf108957944dafa80a9bfda219bfb0f 22-May-2014 Calin Juravle <calin@google.com> Cleaned up pthread rwlocks implementation.

- used underscore_style_for_vars
- extracted time related functionality into a function
- cleaned up style
- removed unused fields from pthread_rwlock_t on LP64
- changed reservation in pthread_rwlock_t so that the size of the
structure equals glibc version

Bug: 8133149

Change-Id: I84ad3918678dc7f5e6b3db9b7e9b0899d3abe9cd
76f352eec12d8938101e5ae33429c72797c3aa23 19-May-2014 Calin Juravle <calin@google.com> Mutex-free implementation of pthread_rwlock

Bug: 8133149
Change-Id: Id6775010d95f2634b173daa55d87a59a3cf4131b
ea5248ee1bc5d031e0b1e70a311f450a741c1e99 15-May-2014 Christopher Ferris <cferris@google.com> Increase minimum thread size for 64 bit.

Bug: 14468519
Change-Id: I642a5515acf5fbed46e77e176f6b5dd3b7c7bd45
7c435f2415f4cdc97fbb7739f70ae5e84f2e2cb0 06-May-2014 Calin Juravle <calin@google.com> Leave more space for extensions in pthread_rwlockattr_t

Change pthread_rwlockattr_t from int to long. On LP64 this gives us more
room for extensibility since longs are 8 bytes. glibc also reserves 8
bytes for this.

Bug: 14582681
Bug: 12875898
Change-Id: I55d599be0fdbbf0cb55957ec0ea62ab042bdee94
b1cacd42454822a4a42b68bfed32b9538210aa25 23-Apr-2014 Calin Juravle <calin@google.com> Reserve space in pthread structures for future extensibility.

Make our structures equal in size with glibc structures. This should
give us plenty of space to implement any missing feature.

Bug: 13278744
Bug: 12875898
(cherry picked from commit cf83fd77caa3128ecb6ac935e342cb0ea258b9ee)

Change-Id: I76968d31024eb51bc73887687e5ac492eb02a27f
6b64000ef0ac6e9476e5f0420b4c09844e65d51f 24-Apr-2014 Greg Hackmann <ghackmann@google.com> Revert "Reserve space in pthread structures for future extensibility."

This reverts commit cf83fd77caa3128ecb6ac935e342cb0ea258b9ee.

Change-Id: I4f69e86ffe1c267a9018eb489d909237534c6cf9
cf83fd77caa3128ecb6ac935e342cb0ea258b9ee 23-Apr-2014 Calin Juravle <calin@google.com> Reserve space in pthread structures for future extensibility.

Make our structures equal in size with glibc structures. This should
give us plenty of space to implement any missing feature.

Bug: 13278744
Bug: 12875898
Change-Id: I980017fd5942411ebc5ac32b2673a10a20db68c8
a4eafa6dbc98378f3fa759fec8590871e2b5ae29 10-Mar-2014 Calin Juravle <calin@google.com> Removed pthread_attr_getstackaddr/pthread_attr_setstackaddr

Moved existing definitions to ndk_cruft to preserve NDK compatibility.

Bug: 13281069
Change-Id: I6f260de69afa55a6274f0d13145c19ac6517b9d5
252ee1e1124ae8aef2bde0c365c9ac6d59282bc8 04-Mar-2014 Narayan Kamath <narayan@google.com> Stop defining HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC.

No code is using this definition.

Change-Id: I188db63f38d62baf1cb57d0a36fcda540ad98492
0e714a5b41451e84c5ded93a42c9a4b0a9440691 04-Mar-2014 Elliott Hughes <enh@google.com> Implement POSIX pthread_mutex_timedlock.

This replaces the non-standard pthread_mutex_lock_timeout_np, which we have
to keep around on LP32 for binary compatibility.

Change-Id: I098dc7cd38369f0c1bec1fac35687fbd27392e00
51e6cb33e3d7c2f44864d356a2a8e66317688f55 03-Mar-2014 Narayan Kamath <narayan@google.com> Implement pthread_condattr_{get,set}clock.

We only support CLOCK_REALTIME and CLOCK_MONOTONIC for now,
so we us a single bit from pthread_cond_t->value to denote
the clock type. Note that this reduces the width of the counter
to 30 bits, but this should be large enough for all practical
purposes.

bug: 13232338

Change-Id: I857e7da64b3ecbb23eeac7c9f3fbd460f60231bd
c3f114037dbf028896310609fd28cf2b3da99c4d 30-Oct-2013 Elliott Hughes <enh@google.com> <pthread.h> fixes and pthread cleanup.

<pthread.h> was missing nonnull attributes, noreturn on pthread_exit,
and had incorrect cv qualifiers for several standard functions.

I've also marked the non-standard stuff (where I count glibc rather
than POSIX as "standard") so we can revisit this cruft for LP64 and
try to ensure we're compatible with glibc.

I've also broken out the pthread_cond* functions into a new file.

I've made the remaining pthread files (plus ptrace) part of the bionic code
and fixed all the warnings.

I've added a few more smoke tests for chunks of untested pthread functionality.

We no longer need the libc_static_common_src_files hack for any of the
pthread implementation because we long since stripped out the rest of
the armv5 support, and this hack was just to ensure that __get_tls in libc.a
went via the kernel if necessary.

This patch also finishes the job of breaking up the pthread.c monolith, and
adds a handful of new tests.

Change-Id: Idc0ae7f5d8aa65989598acd4c01a874fe21582c7
9d23e04c43dbb8480bea8be28b8a2f37423bec49 16-Feb-2013 Elliott Hughes <enh@google.com> Fix pthreads functions that should return ESRCH.

imgtec pointed out that pthread_kill(3) was broken, but most of the
other functions that ought to return ESRCH for invalid/exited threads
were equally broken.

Change-Id: I96347f6195549aee0c72dc39063e6c5d06d2e01f
f8a2c51bf3b85bf86bff905dd1232299d333dafe 13-Sep-2012 David 'Digit' Turner <digit@android.com> LONG_LONG_MIN/MAX: Move declarations to <limits.h>

LONG_LONG_MIN, LONG_LONG_MAX and ULONG_LONG_MAX are
GLibc-specific macros that are better defined in <limits.h>
instead of the current exotic location (<pthread.h>).

Note that GCC's <limits.h> only defines these macros
when __GNU_LIBRARY__ is also defined. This is only the
case when building against GLibc, so manually redefine
the macros here.

Note that using LLONG_MIN/LLONG_MAX/ULLONG_MAX is the
C99-compliant way to get these values, but it's easier
to define these compatibility macros for the sake of
porting existing code.

Change-Id: I8023918d73b4685238054932f94a4006c1ca7d03
9831ad3ce6bd5b22da16a275ed67e7236eae3d1f 29-Aug-2011 David 'Digit' Turner <digit@google.com> libc: speed-up flockfile()/funlockfile()

For Honeycomb, we added proper file thread-safety for
all FILE* operations. However, we did implement that by
using an out-of-band hash table to map FILE* pointers
to phtread_mutex_t mutexes, because we couldn't change
the size of 'struct _sFILE' without breaking the ABI.

It turns out that our BSD-derived code already has
some support code to extend FILE* objects, so use it
instead. See libc/stdio/fileext.h

This patch gets rid of the hash table, and put the
mutex directly into the sFILE extension.

Change-Id: If1c3fe0a0a89da49c568e9a7560b7827737ff4d0
847b183f631ccbaa363a15c24195c00cad9529f9 11-Mar-2011 David 'Digit' Turner <digit@android.com> libc: <pthread.h>: Replace '#if __cplusplus' by '#ifdef __cplusplus'

See http://code.google.com/p/android/issues/detail?id=15221

Change-Id: Ia7b6668c28737810d6c4941604c6adf232a27c61
ca4462d76c65ebfbc20328ee283ac2f19efca732 10-Mar-2011 David 'Digit' Turner <digit@android.com> libc: Fix PTHREAD_RWLOCK_INITIALIZER

The macro definition was incorrect and resulted in a compile error
when used.

Fixes http://code.google.com/p/android/issues/detail?id=15306

Change-Id: I8fa6047b63e7f56b53653774327099822c469cd1
bd8d987b3c3aa6d9d00cede2cb091f00bdb42204 26-Sep-2010 David 'Digit' Turner <digit@google.com> libc: remove C++ comments from public headers.

Change-Id: I4af84f912062cd2ff34711c25122fb323f20c032
4f086aeb4aa06e13079b7fec71a8178ceeacf318 25-Jun-2010 Matt Fischer <matt.fischer@garmin.com> Implemented pthread_atfork()

Change-Id: Ie6c0bf593315d3507b3c4a6c8903a74a1fa053db
78c1c04ced772298be8bdb5a94b6ce491bb9b3e1 20-May-2010 André Goddard Rosa <andre.goddard@gmail.com> pthread: introduce pthread_setname_np() as a mean to give names to threads

... so that each cloned process at the kernel level can be named
independently. Tools like 'top' can display the CPU/memory statistics
for each process's thread if "Show Threads" mode is on.

With this function in place, we can convert dalvik/Thread.c setThreadName()
function over this function. This feature ought to be provided by the
underlying C library and not coded directly in Dalvik.

Change-Id: Ifa997665dbaa114e0b126f8c667708be9a4137fd
Signed-off-by: André Goddard Rosa <andre.goddard@gmail.com>
8a1d2cf1422e35257c160ac5bb12dd3ee481c433 12-May-2010 David 'Digit' Turner <digit@google.com> Add pthread_rwlock_t implementation to the C library (DO NOT MERGE)

Change-Id: I756d8c26afc37cd7b71117ddbaa02a2cb40fdecb
a418c3b8370cae1c80fbe9a06e7e53025da5d6f0 12-May-2010 David 'Digit' Turner <digit@google.com> Add pthread_rwlock_t implementation to the C library

Change-Id: I14d0a112554756a7294a51fe88c1c408a16b5ff1
ee7b077abf1d99503b986489ad93374a057cb354 18-Mar-2010 David 'Digit' Turner <digit@google.com> Add pthread_condattr_init/destroy/setpshared/getpshared

Note that this does not change the implementation of conditional variables
which still use shared futexes, independent on the flags being selected.

This will be fixed in a later patch, once our system is modified to use
pthread_condattr_setpshared(attr, PTHREAD_PROCESS_SHARED) properly.

Change-Id: I935de50964cd41f97a13dbfd6626d3407b0406c3
8641833b62e3b319796dc80ea16eb1592c05edf6 11-Mar-2010 Fabrice Di Meglio <fdimeglio@google.com> Revert "bionic: pthread: use private futexes by default for mutexes and condvars"

This reverts commit ba9c6f0989ae94778ba2b9f597adc827c9dc81e8.
ba9c6f0989ae94778ba2b9f597adc827c9dc81e8 11-Mar-2010 David 'Digit' Turner <digit@google.com> bionic: pthread: use private futexes by default for mutexes and condvars

Private futexes are a recent kernel addition: faster futexes that cannot be
shared between processes. This patch uses them by default, unless the PROCESS_SHARED
attribute flag is used when creating a mutex and/or conditional variable.

Also introduces pthread_condattr_init/destroy/setpshared/getpshared.

Change-Id: I3a0e2116f467072b046524cb5babc00e41057a53
194d3fa048cf909ca592dd56fa538dc9cd3f5ddb 13-Nov-2009 Jean-Baptiste Queru <jbq@google.com> eclair snapshot
3f56b7f65adb9ee35cd0f878ca00b92011eec427 22-Sep-2009 David 'Digit' Turner <digit@google.com> Add pthread_mutex_lock_timeout_np

This is used to perform a mutex lock for a given amount of
milliseconds before giving up. Using the _np prefix since this
is absolutely not portable.

Also remove a compiler warning in pthread_attr_getstackaddr
a2f5e212448f36f0b35cf695d13bb4defdb4472e 14-Jul-2009 Mathias Agopian <mathias@google.com> added pthread_cond_timedwait_relative_np()
1dc9e472e19acfe6dc7f41e429236e7eef7ceda1 04-Mar-2009 The Android Open Source Project <initial-contribution@android.com> auto import from //depot/cupcake/@135843
1767f908af327fa388b1c66883760ad851267013 04-Mar-2009 The Android Open Source Project <initial-contribution@android.com> auto import from //depot/cupcake/@135843
9f65adf2ba3bb15feb8b7a7b3eef788df3fd270e 11-Feb-2009 The Android Open Source Project <initial-contribution@android.com> auto import from //branches/cupcake/...@130745
4e468ed2eb86a2406e14f1eca82072ee501d05fd 18-Dec-2008 The Android Open Source Project <initial-contribution@android.com> Code drop from //branches/cupcake/...@124589
a27d2baa0c1a2ec70f47ea9199b1dd6762c8a349 21-Oct-2008 The Android Open Source Project <initial-contribution@android.com> Initial Contribution