summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2022-06-12 10:40:12 -0400
committerGitHub <noreply@github.com>2022-06-12 10:40:12 -0400
commitd333dbea26437a231bb50d00891da5861567d35a (patch)
treed6b79075cd65b101cec0b38f9e4eb86de5b850a7
parent660e6bd5cd277296aa8b3aadc1383995b6c00e87 (diff)
parent0f5944459beb952fd49461dfb3c2867de7df314b (diff)
downloadlibgit2-d333dbea26437a231bb50d00891da5861567d35a.tar.gz
Merge pull request #6288 from libgit2/cmn/mwindow-simplifications
A couple of simplications around mwindow
-rw-r--r--src/libgit2/mwindow.c18
-rw-r--r--src/libgit2/mwindow.h2
2 files changed, 10 insertions, 10 deletions
diff --git a/src/libgit2/mwindow.c b/src/libgit2/mwindow.c
index d06b7a80e..ad649490a 100644
--- a/src/libgit2/mwindow.c
+++ b/src/libgit2/mwindow.c
@@ -186,13 +186,16 @@ int git_mwindow_free_all(git_mwindow_file *mwf)
}
/*
- * Check if a window 'win' contains the address 'offset'
+ * Check if a window 'win' contains both the address 'offset' and 'extra'.
+ *
+ * 'extra' is the size of the hash we're using as we always want to make sure
+ * that it's contained.
*/
-int git_mwindow_contains(git_mwindow *win, off64_t offset)
+int git_mwindow_contains(git_mwindow *win, off64_t offset, off64_t extra)
{
off64_t win_off = win->offset;
return win_off <= offset
- && offset <= (off64_t)(win_off + win->window_map.len);
+ && (offset + extra) <= (off64_t)(win_off + win->window_map.len);
}
#define GIT_MWINDOW__LRU -1
@@ -237,9 +240,7 @@ static bool git_mwindow_scan_recently_used(
* store it in the output parameter. If lru_window is NULL,
* it's the first loop, so store it as well.
*/
- if (!lru_window ||
- (comparison_sign == GIT_MWINDOW__LRU && lru_window->last_used > w->last_used) ||
- (comparison_sign == GIT_MWINDOW__MRU && lru_window->last_used < w->last_used)) {
+ if (!lru_window || (comparison_sign * w->last_used) > lru_window->last_used) {
lru_window = w;
lru_last = w_last;
found = true;
@@ -406,14 +407,13 @@ unsigned char *git_mwindow_open(
return NULL;
}
- if (!w || !(git_mwindow_contains(w, offset) && git_mwindow_contains(w, offset + extra))) {
+ if (!w || !(git_mwindow_contains(w, offset, extra))) {
if (w) {
w->inuse_cnt--;
}
for (w = mwf->windows; w; w = w->next) {
- if (git_mwindow_contains(w, offset) &&
- git_mwindow_contains(w, offset + extra))
+ if (git_mwindow_contains(w, offset, extra))
break;
}
diff --git a/src/libgit2/mwindow.h b/src/libgit2/mwindow.h
index e3a03f019..e32ab99d4 100644
--- a/src/libgit2/mwindow.h
+++ b/src/libgit2/mwindow.h
@@ -38,7 +38,7 @@ typedef struct git_mwindow_ctl {
git_vector windowfiles;
} git_mwindow_ctl;
-int git_mwindow_contains(git_mwindow *win, off64_t offset);
+int git_mwindow_contains(git_mwindow *win, off64_t offset, off64_t extra);
int git_mwindow_free_all(git_mwindow_file *mwf); /* locks */
unsigned char *git_mwindow_open(git_mwindow_file *mwf, git_mwindow **cursor, off64_t offset, size_t extra, unsigned int *left);
int git_mwindow_file_register(git_mwindow_file *mwf);