{{ message }}
sysdir: don't assume an empty dir is uninitialized#3877
Merged
Conversation
ac2db09 to
ef02396
Compare
Member
There was a problem hiding this comment.
Hum. If you're already creating a new sysdir struct, what do you think about including the guess callbacks into the struct and then drop the git_sysdir__dir_guess array? So basically
static struct git_sysdir__dir dirs[] = {
{ git_sysdir_guess_system_dirs, GIT_BUF_INIT },
{ git_sysdir_guess_global_dirs, GIT_BUF_INIT },
...
};
This would make the correlation of these two structures clearer and reduce a bit of its magic.
Don't try to determine when sysdirs are uninitialized. Instead, simply initialize them all at `git_libgit2_init` time and never try to reinitialize, except when consumers explicitly call `git_sysdir_set`. Looking at the buffer length is especially problematic, since there may no appropriate path for that value. (For example, the Windows-specific programdata directory has no value on non-Windows machines.) Previously we would continually trying to re-lookup these values, which could get racy if two different threads are each calling `git_sysdir_get` and trying to lookup / clear the value simultaneously.
ef02396 to
031d34b
Compare
Member
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Don't assume that an empty system directory buffer is uninitialized.
In fact, there simply may be no appropriate path for that value.
(For example, the Windows-specific programdata directory has no value
on non-Windows machines.)
This prevents us from continually trying to re-lookup these values,
which could get racy if two different threads are each calling
git_sysdir_getand trying to lookup / clear the value simultaneously.Fixes #3871