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
|
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
|
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
|