summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVicent Martí <vicent@github.com>2012-09-14 13:45:29 -0700
committerVicent Martí <vicent@github.com>2012-09-14 13:45:29 -0700
commit1e90ae77c4660f9637125a9f72336a25de817efb (patch)
tree10b40ae21a7fb3113fdab8fe883a0d8cb6d033ef /src
parent70341b096329a37116c802dd53bdcec1bd2280f5 (diff)
parent3d7617e49e22053e3a34061fc6f109d27c67d1d2 (diff)
downloadlibgit2-1e90ae77c4660f9637125a9f72336a25de817efb.tar.gz
Merge pull request #860 from schu/thread-safety
odb_pack: make sure to search all backends
Diffstat (limited to 'src')
-rw-r--r--src/odb_pack.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/odb_pack.c b/src/odb_pack.c
index d33d06456..b4f958b6f 100644
--- a/src/odb_pack.c
+++ b/src/odb_pack.c
@@ -267,9 +267,10 @@ static int pack_entry_find(struct git_pack_entry *e, struct pack_backend *backen
{
int error;
unsigned int i;
+ struct git_pack_file *last_found = backend->last_found;
- if (backend->last_found &&
- git_pack_entry_find(e, backend->last_found, oid, GIT_OID_HEXSZ) == 0)
+ if (last_found &&
+ git_pack_entry_find(e, last_found, oid, GIT_OID_HEXSZ) == 0)
return 0;
if ((error = packfile_refresh_all(backend)) < 0)
@@ -279,7 +280,7 @@ static int pack_entry_find(struct git_pack_entry *e, struct pack_backend *backen
struct git_pack_file *p;
p = git_vector_get(&backend->packs, i);
- if (p == backend->last_found)
+ if (p == last_found)
continue;
if (git_pack_entry_find(e, p, oid, GIT_OID_HEXSZ) == 0) {
@@ -300,12 +301,13 @@ static int pack_entry_find_prefix(
int error;
unsigned int i;
unsigned found = 0;
+ struct git_pack_file *last_found = backend->last_found;
if ((error = packfile_refresh_all(backend)) < 0)
return error;
- if (backend->last_found) {
- error = git_pack_entry_find(e, backend->last_found, short_oid, len);
+ if (last_found) {
+ error = git_pack_entry_find(e, last_found, short_oid, len);
if (error == GIT_EAMBIGUOUS)
return error;
if (!error)
@@ -316,7 +318,7 @@ static int pack_entry_find_prefix(
struct git_pack_file *p;
p = git_vector_get(&backend->packs, i);
- if (p == backend->last_found)
+ if (p == last_found)
continue;
error = git_pack_entry_find(e, p, short_oid, len);