libgit2/libgit2 — pull request #2329 by anuraggup (2014-05-06 19:53:57+00:00)
Title: Fix the issues in git_shutdown

* Call to `git_shutdown` results in setting `git__n_shutdown_callbacks` to -1. Next call to `git__on_shutdown` results in ABW (Array Bound Write) for array `git__shutdown_callbacks`.
In the current Implementation, `git_atomic_dec` is called `git__n_shutdown_callbacks` + 1 times. I have modified it to a `for` loop so that it is more readable. It would not set `git__n_shutdown_callbacks` to a negative number and reset the elements of `git__shutdown_callbacks` to NULL.

* In function `git_sysdir_get`, shutdown function is registered only if `git_sysdir__dirs_shutdown_set` is set to 0. However, after this variable is set to 1, it is never reset to 0. If `git_sysdir_global_init` is called again from `synchronized_threads_init` it does not register shutdown function for this subsystem. In this PR, I reset variable `git_sysdir__dirs_shutdown_set` to 0 after all the buffers are free'd in `git_sysdir_global_shutdown`.