• Elliott Hughes's avatar
    Fix pthread_join. · 877ec6d9
    Elliott Hughes authored
    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
    877ec6d9
syscalls.mk 8.51 KB