• Show log

    Commit

  • Hash : 59c6c286
    Author : Patrick Steinhardt
    Date : 2016-10-27T12:31:17

    global: synchronize initialization and shutdown with pthreads
    
    When trying to initialize and tear down global data structures
    from different threads at once with `git_libgit2_init` and
    `git_libgit2_shutdown`, we race around initializing data. While
    we use `pthread_once` to assert that we only initilize data a
    single time, we actually reset the `pthread_once_t` on the last
    call to `git_libgit2_shutdown`. As resetting this variable is not
    synchronized with other threads trying to access it, this is
    actually racy when one thread tries to do a complete shutdown of
    libgit2 while another thread tries to initialize it.
    
    Fix the issue by creating a mutex which synchronizes `init_once`
    and the library shutdown.