01030c24b0e3ace1b4cdaf415354e2f315f4f3a9 |
|
22-Sep-2015 |
Yabin Cui <yabinc@google.com> |
Increase alternative signal stack size on 64-bit devices. Bug: 23041777 Bug: 24187462 Change-Id: I7d84c0cc775a74753a3e8e101169c0fb5dbf7437
|
ef115003012f61cf5539fdfeb201b98e4a92f610 |
|
31-Mar-2015 |
Yabin Cui <yabinc@google.com> |
Revert "Revert "add guard pages to the internal signal stacks"" This reverts commit a3125fd1396a09a7fc4872dc4653f342150a3deb. And Fix the prctl() problem that cause system crash. Change-Id: Icc8d12d848cfba881a7984ca2827fd81be41f9fd
|
a3125fd1396a09a7fc4872dc4653f342150a3deb |
|
31-Mar-2015 |
Elliott Hughes <enh@google.com> |
Revert "add guard pages to the internal signal stacks" This reverts commit 595752f623ae88f7e4193a6e531a0805f1c6c4dc. Change-Id: Iefa66e9049ca0424e53cd5fc320d161b93556dcb
|
595752f623ae88f7e4193a6e531a0805f1c6c4dc |
|
29-Mar-2015 |
Daniel Micay <danielmicay@gmail.com> |
add guard pages to the internal signal stacks Signal handlers tend to be lean, but can still overflow the (tiny) stack. Change-Id: Ia21c6453d92a9f8d1536ad01ff26a1a84c05f8fb
|
673b15e4ee2c6d99b150aedddc0f389e29f98e1b |
|
19-Mar-2015 |
Yabin Cui <yabinc@google.com> |
Let g_thread_list_lock only protect g_thread_list. As glibc/netbsd don't protect access to thread struct members by a global lock, we don't want to do it either. This change reduces the responsibility of g_thread_list_lock to only protect g_thread_list. Bug: 19636317 Change-Id: I897890710653dac165d8fa4452c7ecf74abdbf2b
|
a2db50d5d7fa67b297eddd1c0549f08ea4b6a950 |
|
20-Mar-2015 |
Yabin Cui <yabinc@google.com> |
Fix alignment error for pthread_internal_t/pthread stack. aligned attribute can only control compiler's behavior, but we are manually allocating pthread_internal_t. So we need to make sure of alignment manually. Change-Id: Iea4c46eadf10dfd15dc955c5f41cf6063cfd8536
|
aec2bb5ec67637ec4b5374287e9bc0d572632054 |
|
20-Mar-2015 |
Yabin Cui <yabinc@google.com> |
Fix two errors in pthread_detach.cpp. The errors are introduced in "Make pthread join_state not protected by g_thread_list_lock". Bug: 19636317 Change-Id: I58ae9711da94bfbac809abfd81311eeb70301a4b
|
2f836d4989845c0c82a1e4f99206fb0ff0d137a2 |
|
18-Mar-2015 |
Yabin Cui <yabinc@google.com> |
Make __get_thread inlined. Bug: 19825434 Change-Id: Ifb672a45a5776b83625a25654ed0d6f7fc368ae3
|
58cf31b50699ed9f523de38c8e943f3bbd1ced9e |
|
07-Mar-2015 |
Yabin Cui <yabinc@google.com> |
Make pthread join_state not protected by g_thread_list_lock. 1. Move the representation of thread join_state from pthread.attr.flag to pthread.join_state. This clarifies thread state change. 2. Use atomic operations for pthread.join_state. So we don't need to protect it by g_thread_list_lock. g_thread_list_lock will be reduced to only protect g_thread_list or even removed in further changes. Bug: 19636317 Change-Id: I31fb143a7c69508c7287307dd3b0776993ec0f43
|
9d0c79304d2413028aa5c213f7a567f00feccde5 |
|
06-Mar-2015 |
Yabin Cui <yabinc@google.com> |
Remove PTHREAD_ATTR_FLAG_MAIN_THREAD. Make this change because I think it is more reasonable to check stack info in pthread_getattr_np. I believe pthread_attr_t is not tied with any thread, and can't have a flag saying who using it is the main thread. This change also helps refactor of g_thread_list_lock. Bug: 19636317 Change-Id: Iedbb85a391ac3e1849dd036d01445dac4bc63db9
|
5e2bd719d7dd19afe55f8d4f24366c0230e0e6c7 |
|
21-Feb-2015 |
Yabin Cui <yabinc@google.com> |
Refactor pthread_key.cpp to be lock-free. Change-Id: I20dfb9d3cdc40eed10ea12ac34f03caaa94f7a49
|
19e246dda6772ffc532b1762cd7870d6c3b01c12 |
|
18-Dec-2014 |
Yabin Cui <yabinc@google.com> |
Fix possible leak in pthread_detach. If pthread_detach() is called while the thread is in pthread_exit(), it takes the risk that no one can free the pthread_internal_t. So I add PTHREAD_ATTR_FLAG_ZOMBIE to detect this, maybe very rare, but both glibc and netbsd libpthread have similar function. Change-Id: Iaa15f651903b8ca07aaa7bd4de46ff14a2f93835
|
ba8dfc2669d658dc340eb8f9c9b40ca074f05047 |
|
06-Jan-2015 |
Yabin Cui <yabinc@google.com> |
Remove PTHREAD_ATTR_FLAG_USER_ALLOCATED_STACK. Patch for https://android-review.googlesource.com/#/c/120844/. Change-Id: Idca5ccd7b28e8f07f1d2d1b6e3bba6781b62f0e0
|
6a7aaf46759db32c6ed0eb953a4a230dc96af0d9 |
|
23-Dec-2014 |
Yabin Cui <yabinc@google.com> |
Reserve enough user request stack space in pthread_create. Bug: 18830897 Change-Id: I1ba4aaeaf66a7ff99c5d82ad45469011171b0a3b
|
8cf1b305670123aed7638d984ca39bfd22388440 |
|
04-Dec-2014 |
Yabin Cui <yabinc@google.com> |
Use mmap to create the pthread_internal_t Add name to mmaped regions. Add pthread benchmark code. Allocate pthread_internal_t on regular stack. Bug: 16847284 Change-Id: Id60835163bb0d68092241f1a118015b5a8f85069
|
8574a0670bf698b8d2f817098f9d825c4be03a68 |
|
02-Dec-2014 |
Yabin Cui <yabinc@google.com> |
Use mmap to create the pthread_internal_t. Bug: 16847284 Change-Id: I488fa236f57aa3acb29b4ffbbab2fab51b0653be
|
5b8ceff5f87889e781c13305767e140afd28eb76 |
|
26-Nov-2014 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Use mmap to create the pthread_internal_t." Unfortunately, this change provokes random crashes for ART, and I have seen libc crashes on the device that might be related to it. Reverting it fixes the ART crashes. there is unfortunately no stack trace for the crashes, but just a "Segmentation fault" message. This reverts commit cc5f6543e3f91385b9a912438965b7e8265df54a. Change-Id: I68dca8e1e9b9edcce7eb84596e8db619e40e8052
|
cc5f6543e3f91385b9a912438965b7e8265df54a |
|
25-Nov-2014 |
Yabin Cui <yabinc@google.com> |
Use mmap to create the pthread_internal_t. Bug: 16847284 Change-Id: Ic8c85f95afac1d8422ecb69674c688d1fecb6a44
|
04303f5a8ab9a992f3671d46b6ee2171582cbd61 |
|
19-Sep-2014 |
Elliott Hughes <enh@google.com> |
Add semaphore tests, fix sem_destroy. Bug: https://code.google.com/p/android/issues/detail?id=76088 Change-Id: I4a0561b23e90312384d40a1c804ca64ee98f4066
|
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
|
11bf8a3025a7b5aee891c521255a7db1860e5b12 |
|
30-Jul-2014 |
Elliott Hughes <enh@google.com> |
Only wipe TLS for user-supplied stacks. Bug: 16667988 (cherry picked from commit 40a521744825b6060960c296d5fb3da4c6593d94) Change-Id: I7550fa47b76e643323aa3e2a53529e393c829e47
|
40a521744825b6060960c296d5fb3da4c6593d94 |
|
30-Jul-2014 |
Elliott Hughes <enh@google.com> |
Only wipe TLS for user-supplied stacks. Bug: 16667988 Change-Id: Id180ab2bc6713e1612386120a306db5bbf1d6046
|
7086ad6919feb2415c6027163f5c63323bcca27c |
|
20-Jun-2014 |
Elliott Hughes <enh@google.com> |
Cache getpid. In practice, with this implementation we never need to make a system call. We get the main thread's tid (which is the same as our pid) back from the set_tid_address system call we have to make during initialization. A new pthread will have the same pid as its parent, and a fork child's main (and only) thread will have a pid equal to its tid, which we get for free from the kernel before clone returns. The only time we'd actually have to make a getpid system call now is if we take a signal during fork and the signal handler calls getpid. (That, or we call getpid in the dynamic linker while it's still dealing with its own relocations and hasn't even set up the main thread yet.) Bug: 15387103 Change-Id: I6d4718ed0a5c912fc75b5f738c49a023dbed5189
|
b30aff405a220495941f1673b0a5e66c4fa8b84c |
|
28-May-2014 |
Elliott Hughes <enh@google.com> |
Revert "Revert "Lose the hand-written futex assembler."" The problem with the original patch was that using syscall(3) means that errno can be set, but pthread_create(3) was abusing the TLS errno slot as a pthread_mutex_t for the thread startup handshake. There was also a mistake in the check for syscall failures --- it should have checked against -1 instead of 0 (not just because that's the default idiom, but also here because futex(2) can legitimately return values > 0). This patch stops abusing the TLS errno slot and adds a pthread_mutex_t to pthread_internal_t instead. (Note that for LP64 sizeof(pthread_mutex_t) > sizeof(uintptr_t), so we could potentially clobber other TLS slots too.) I've also rewritten the LP32 compatibility stubs to directly reuse the code from the .h file. This reverts commit 75c55ff84ebfa686c7ae2cc8ee431c6a33bd46b4. Bug: 15195455 Change-Id: I6ffb13e5cf6a35d8f59f692d94192aae9ab4593d
|
1728b2396591853345507a063ed6075dfd251706 |
|
14-May-2014 |
Elliott Hughes <enh@google.com> |
Switch to g_ for globals. That's what the Google style guide recommends, and we're starting to get a mix. Change-Id: Ib0c53a890bb5deed5c679e887541a715faea91fc
|
4b558f50a42c97d461f1dede5aaaae490ea99e2e |
|
05-Mar-2014 |
Elliott Hughes <enh@google.com> |
Rewrite the POSIX timer functions. This is a much simpler implementation that lets the kernel do as much as possible. Co-authored-by: Jörgen Strand <jorgen.strand@sonymobile.com> Co-authored-by: Snild Dolkow <snild.dolkow@sonymobile.com> Change-Id: Iad19f155de977667aea09410266d54e63e8a26bf
|
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
|
cef3faec0ea40fdfe58e425fd0be64f00de6a26d |
|
20-Nov-2013 |
Elliott Hughes <enh@google.com> |
Clean up pthread_internal_t. Bug: 11755300 Change-Id: Ib509e8c5ec6b23513aa78b5ac5141d7c34ce2dc8
|
36d6188f8cd8b948fb797f11d9620d63d0c2215a |
|
19-Nov-2013 |
Elliott Hughes <enh@google.com> |
Clean up forking and cloning. The kernel now maintains the pthread_internal_t::tid field for us, and __clone was only used in one place so let's inline it so we don't have to leave such a dangerous function lying around. Also rename files to match their content and remove some useless #includes. Change-Id: I24299fb4a940e394de75f864ee36fdabbd9438f9
|
877ec6d90418ff1d6597147d355a2229fdffae7e |
|
16-Nov-2013 |
Elliott Hughes <enh@google.com> |
Fix pthread_join. Let the kernel keep pthread_internal_t::tid updated, including across forks and for the main thread. This then lets us fix pthread_join to only return after the thread has really exited. Also fix the thread attributes of the main thread so we don't unmap the main thread's stack (which is really owned by the dynamic linker and contains things like environment variables), which fixes crashes when joining with an exited main thread and also fixes problems reported publicly with accessing environment variables after the main thread exits (for which I've added a new unit test). In passing I also fixed a bug where if the clone(2) inside pthread_create(3) fails, we'd unmap the child's stack and TLS (which contains the mutex) and then try to unlock the mutex. Boom! It wasn't until after I'd uploaded the fix for this that I came across a new public bug reporting this exact failure. Bug: 8206355 Bug: 11693195 Bug: https://code.google.com/p/android/issues/detail?id=57421 Bug: https://code.google.com/p/android/issues/detail?id=62392 Change-Id: I2af9cf6e8ae510a67256ad93cad891794ed0580b
|
e48b68570d872ef7ece1d873c0ea298ea76393f3 |
|
15-Nov-2013 |
Elliott Hughes <enh@google.com> |
Clean up the pthread_create trampoline. Bug: 8206355 Bug: 11693195 Change-Id: I35cc024d5b6ebd19d1d2e45610db185addaf45df
|
70b24b1cc2a1a4436b1fea3f8b76616fdcb27224 |
|
15-Nov-2013 |
Elliott Hughes <enh@google.com> |
Switch pthread_create over to __bionic_clone. Bug: 8206355 Bug: 11693195 Change-Id: I04aadbc36c87e1b7e33324b9a930a1e441fbfed6
|
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
|
2b6e43e00ece68b3aba26d8f95f07cd9d9294ab4 |
|
30-Oct-2013 |
Elliott Hughes <enh@google.com> |
Explain the sigprocmask in pthread_exit. Also remove the SIGSEGV special case, which was probably because hand-written __exit_with_stack_teardown stubs used to try to cause SIGSEGV if the exit system call returned (which it never does, so that dead code disappeared). Also move the sigprocmask into the only case where it's necessary --- the one where we unmap the stack that would be used by a signal handler. Change-Id: Ie40d20c1ae2f5e7125131b6b492cba7a2c6d08e9
|
eb847bc8666842a3cfc9c06e8458ad1abebebaf0 |
|
10-Oct-2013 |
Elliott Hughes <enh@google.com> |
Fix x86_64 build, clean up intermediate libraries. The x86_64 build was failing because clone.S had a call to __thread_entry which was being added to a different intermediate .a on the way to making libc.so, and the linker couldn't guarantee statically that such a relocation would be possible. ld: error: out/target/product/generic_x86_64/obj/STATIC_LIBRARIES/libc_common_intermediates/libc_common.a(clone.o): requires dynamic R_X86_64_PC32 reloc against '__thread_entry' which may overflow at runtime; recompile with -fPIC This patch addresses that by ensuring that the caller and callee end up in the same intermediate .a. While I'm here, I've tried to clean up some of the mess that led to this situation too. In particular, this removes libc/private/ from the default include path (except for the DNS code), and splits out the DNS code into its own library (since it's a weird special case of upstream NetBSD code that's diverged so heavily it's unlikely ever to get back in sync). There's more cleanup of the DNS situation possible, but this is definitely a step in the right direction, and it's more than enough to get x86_64 building cleanly. Change-Id: I00425a7245b7a2573df16cc38798187d0729e7c4
|
50af69e8f326b2762a44d5fea2b118e7616e5d20 |
|
14-Sep-2013 |
Brian Carlstrom <bdc@google.com> |
Simplify main thread stack size initialization Change-Id: Iec09433d9de501031cce09dc75848a5e8f3d96bf
|
4cf13952175a793fed4646d7d7396364874b0909 |
|
20-Jul-2013 |
Elliott Hughes <enh@google.com> |
Move stuff only needed by pthread-timers.c into pthread-timers.c. Change-Id: I4915b3fff9c4f5a36b4f51027fb22019c11607b0
|
84114c8dd5b17efecf7988f263ce431208d7be5a |
|
17-Jul-2013 |
Elliott Hughes <enh@google.com> |
Improve stack overflow diagnostics (take 2). This reverts commits eb1b07469f2b5a392dc1bfd8adc211aea8c72bc5 and d14dc3b87fbf80553f1cafa453816b7f11366627, and fixes the bug where we were calling mmap (which might cause errno to be set) before __set_tls (which is required to implement errno). Bug: 8557703 Change-Id: I2c36d00240c56e156e1bb430d8c22a73a068b70c
|
eb1b07469f2b5a392dc1bfd8adc211aea8c72bc5 |
|
17-Jul-2013 |
Guang Zhu <guangzhu@google.com> |
Revert "Clean up our alternate signal stacks." This reverts commit 5cf87951abd23b0b3ebf159e8aa06b02e39527ca. Change-Id: Idd6ca7d80a018755da3bd315d91193723ce7f3bf
|
5cf87951abd23b0b3ebf159e8aa06b02e39527ca |
|
16-Jul-2013 |
Elliott Hughes <enh@google.com> |
Clean up our alternate signal stacks. Bug: 8557703 Change-Id: Ie93901dd1c29e9d3bf795b0f0400616d9ef08f75
|
0f020d18b138e24b1fe34074808e07ac412f35a4 |
|
06-Jun-2013 |
msg555 <msg555@gmail.com> |
Handles spurious wake-ups in pthread_join() Removed 'join_count' from pthread_internal_t and switched to using the flag PTHREAD_ATTR_FLAG_JOINED to indicate if a thread is being joined. Combined with a switch to a while loop in pthread_join, this fixes spurious wake-ups but prevents a thread from being joined multiple times. This is fine for two reasons: 1) The pthread_join specification allows for undefined behavior when multiple threads try to join a single thread. 2) There is no thread safe way to allow multiple threads to join a single thread with the pthread interface. The second thread calling pthread_join could be pre-empted until the thread is destroyed and its handle reused for a different thread. Therefore multi-join is always an error. Bug: https://code.google.com/p/android/issues/detail?id=52255 Change-Id: I8b6784d47620ffdcdbfb14524e7402e21d46c5f7
|
36fa67bcdd90f18a3c68f8637ae836762407fa51 |
|
06-Jun-2013 |
Elliott Hughes <enh@google.com> |
Ensure header files using __BEGIN_DECLS include sys/cdefs.h. We keep fixing these one-by-one; let's fix them all at once. Found thus: find . -name *.h | xargs grep -L sys/cdefs.h | xargs grep -l BEGIN_DECL | xargs grep -L sys/types Change-Id: I188842aa2484dc6176e96556d57c38a0f785b59b
|
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
|
40eabe24e4e3ae8ebe437f1f4e43cf39cbba2e9e |
|
15-Feb-2013 |
Elliott Hughes <enh@google.com> |
Fix the pthread_setname_np test. Fix the pthread_setname_np test to take into account that emulator kernels are so old that they don't support setting the name of other threads. The CLONE_DETACHED thread is obsolete since 2.5 kernels. Rename kernel_id to tid. Fix the signature of __pthread_clone. Clean up the clone and pthread_setname_np implementations slightly. Change-Id: I16c2ff8845b67530544bbda9aa6618058603066d
|
6d339182070b035ca94f19bc37c94f4d9813c374 |
|
13-Feb-2013 |
Elliott Hughes <enh@google.com> |
Simplify pthread_create, using more public API. Change-Id: I08e65ba88ed01436223e4e528631c9e41ec0e7f4
|
3e898476c7230b60a0f76968e64ff25f475b48c0 |
|
12-Feb-2013 |
Elliott Hughes <enh@google.com> |
Revert "Revert "More pthreads cleanup."" This reverts commit 6f94de3ca49e4ea147b1c59e5818fa175846518f (Doesn't try to increase the number of TLS slots; that leads to an inability to boot. Adds more tests.) Change-Id: Ia7d25ba3995219ed6e686463dbba80c95cc831ca
|
6f94de3ca49e4ea147b1c59e5818fa175846518f |
|
12-Feb-2013 |
Elliott Hughes <enh@google.com> |
Revert "More pthreads cleanup." This reverts commit 2a1bb4e64677b9abbc17173c79768ed494565047 Change-Id: Ia443d0748015c8e9fc3121e40e68258616767b51
|
2a1bb4e64677b9abbc17173c79768ed494565047 |
|
11-Feb-2013 |
Elliott Hughes <enh@google.com> |
More pthreads cleanup. POSIX says pthread_create returns EAGAIN, not ENOMEM. Also pull pthread_attr_t functions into their own file. Also pull pthread_setname_np into its own file. Also remove unnecessary #includes from pthread_key.cpp. Also account for those pthread keys used internally by bionic, so they don't count against the number of keys available to user code. (They do with glibc, but glibc's limit is the much more generous 1024.) Also factor out the common errno-restoring idiom to reduce gotos. Bug: 6702535 Change-Id: I555e66efffcf2c1b5a2873569e91489156efca42
|
44b53ad6818de344e0b499ad8fdbb21fcb0ff2b6 |
|
11-Feb-2013 |
Elliott Hughes <enh@google.com> |
Revert "Revert "Pull the pthread_key_t functions out of pthread.c."" This reverts commit 6260553d48f6fd87ca220270bea8bafdde5726ec (Removing the accidental libm/Android.mk change.) Change-Id: I6cddd9857c31facc05636e8221505b3d2344cb75
|
6260553d48f6fd87ca220270bea8bafdde5726ec |
|
11-Feb-2013 |
Elliott Hughes <enh@google.com> |
Revert "Pull the pthread_key_t functions out of pthread.c." This reverts commit ad59322ae432d11ff36dcf046016af8cfe45fbe4 somehow my unfinished libm/Android.mk change got into here. Change-Id: I46be626c5269d60fb1ced9862f2ebaa380b4e0af
|
ad59322ae432d11ff36dcf046016af8cfe45fbe4 |
|
09-Feb-2013 |
Elliott Hughes <enh@google.com> |
Pull the pthread_key_t functions out of pthread.c. This was originally motivated by noticing that we were setting the wrong bits for the well-known tls entries. That was a harmless bug because none of the well-known tls entries has a destructor, but it's best not to leave land mines lying around. Also add some missing POSIX constants, a new test, and fix pthread_key_create's return value when we hit the limit. Change-Id: Ife26ea2f4b40865308e8410ec803b20bcc3e0ed1
|
4f251bee5d51228217c1bf4dfc9219f3058bd3ed |
|
02-Nov-2012 |
Elliott Hughes <enh@google.com> |
Don't corrupt the thread list if the main thread exits. ...and don't pass a non-heap pointer to free(3), either. This patch replaces the "node** prev" with the clearer "node* prev" style and fixes the null pointer dereference in the old code. That's not sufficient to fix the reporter's bug, though. The pthread_internal_t* for the main thread isn't heap-allocated --- __libc_init_tls causes a pointer to a statically-allocated pthread_internal_t to be added to the thread list. Bug: http://code.google.com/p/android/issues/detail?id=37410 Change-Id: I112b7f22782fc789d58f9c783f7b323bda8fb8b7
|
ae8eb74675722b57ab66a51f1d6f4f250137bb23 |
|
27-Oct-2012 |
Xi Wang <xi.wang@gmail.com> |
Fix a potential NULL pointer dereference in _init_thread(). The first NULL pointer check against `attr' suggests that `attr' can be NULL. Then later `attr' is directly dereferenced, suggesting the opposite. if (attr == NULL) { ... } else { ... } ... if (attr->stack_base == ...) { ... } The public API pthread_create(3) allows NULL, and interprets it as "default". Our implementation actually swaps in a pointer to the global default pthread_attr_t, so we don't need any NULL checks in _init_thread. (The other internal caller passes its own pthread_attr_t.) Change-Id: I0a4e79b83f5989249556a07eed1f2887e96c915e Signed-off-by: Xi Wang <xi.wang@gmail.com>
|
5419b9474753d25dff947c7740532f86d130c0be |
|
17-Oct-2012 |
Elliott Hughes <enh@google.com> |
Make dlerror(3) thread-safe. I gave up trying to use the usual thread-local buffer idiom; calls to calloc(3) and free(3) from any of the "dl" functions -- which live in the dynamic linker -- end up resolving to the dynamic linker's stubs. I tried to work around that, but was just making things more complicated. This alternative costs us a well-known TLS slot (instead of the dynamically-allocated TLS slot we'd have used otherwise, so no difference there), plus an extra buffer inside every pthread_internal_t. Bug: 5404023 Change-Id: Ie9614edd05b6d1eeaf7bf9172792d616c6361767
|
bfeab1bbe7e8d0c08b7e3f46aedab64e3b2bf706 |
|
06-Sep-2012 |
Elliott Hughes <enh@google.com> |
Don't corrupt the thread list in static executables. Several previous changes conspired to make a mess of the thread list in static binaries. This was most obvious when trying to call pthread_key_delete(3) on the main thread. Bug: http://code.google.com/p/android/issues/detail?id=36893 Change-Id: I2a2f553114d8fb40533c481252b410c10656da2e
|
d0c884d3595ecca03c3e70de9909c090cd5f9cae |
|
22-Feb-2012 |
Pierre Peiffer <pierre.peiffer@stericsson.com> |
Let pthread_create fail if schedparam can't be set The creation of a thread succeeds even if the requested scheduling parameters can not be set. This is not POSIX compliant, and even worse, it leads to a wrong behavior. Let pthread_create() fail in this case. Change-Id: Ice66e2a720975c6bde9fe86c2cf8f649533a169c Signed-off-by: Christian Bejram <christian.bejram@stericsson.com>
|
1a78fbb5c8228e4aea2a516818828b76044310f2 |
|
22-Mar-2012 |
Evgeniy Stepanov <eugenis@google.com> |
Initialize TLS before any application code is run. Since e19d702b8e33, dlsym and friends use recursive mutexes that require the current thread id, which is not available before the libc constructor. This prevents us from using dlsym() in .preinit_array. This change moves TLS initialization from libc constructor to the earliest possible point - immediately after linker itself is relocated. As a result, pthread_internal_t for the initial thread is available from the start. As a bonus, values stored in TLS in .preinit_array are not lost when libc is initialized. Change-Id: Iee5a710ee000173bff63e924adeb4a4c600c1e2d
|
4f086aeb4aa06e13079b7fec71a8178ceeacf318 |
|
25-Jun-2010 |
Matt Fischer <matt.fischer@garmin.com> |
Implemented pthread_atfork() Change-Id: Ie6c0bf593315d3507b3c4a6c8903a74a1fa053db
|
3a654b1e04d4275ae315cfe1b196998acf10052c |
|
03-Jun-2009 |
David 'Digit' Turner <digit@google.com> |
Revert "Fix the C library initialization to avoid calling static C++ constructors twice." This reverts commit 03eabfe65e1e2c36f4d26c78a730fa19a3bdada3.
|
03eabfe65e1e2c36f4d26c78a730fa19a3bdada3 |
|
28-May-2009 |
David 'Digit' Turner <digit@google.com> |
Fix the C library initialization to avoid calling static C++ constructors twice. The problem was due to the fact that, in the case of dynamic executables, the dynamic linker calls the DT_PREINIT_ARRAY, DT_INIT and DT_INIT_ARRAY constructors when loading shared libraries and dynamic executables, *before* calling the executable's entry point (i.e. arch-$ARCH/bionic/crtbegin_dynamic.c) which in turns call __libc_init() in libc.so, as defined by bionic/libc_init_dynamic.c The latter did call these constructors array again, mistakenly. The patch also updates the documentation of many related functions. Also adds a new section to linker/README.TXT explaining restrictions on C library usage. The patch has been tested on a Dream for stability issues with proprietary blobs: - H264 decoding works - Camera + Video recording works - GPS works - Sensors work The tests in system/extra/tests/bionic/libc/common/test_static_cpp_mutex.cpp has been run and shows the static C++ constructor being called only once.
|
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
|
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
|