Browse Source

Merge branch 'jk/clear-delta-base-cache-fix'

A crashing bug introduced in v2.11 timeframe has been found (it is
triggerable only in fast-import) and fixed.

* jk/clear-delta-base-cache-fix:
  clear_delta_base_cache(): don't modify hashmap while iterating
maint
Junio C Hamano 8 years ago
parent
commit
c54ba283fa
  1. 4
      Documentation/technical/api-hashmap.txt
  2. 9
      sha1_file.c

4
Documentation/technical/api-hashmap.txt

@ -188,7 +188,9 @@ Returns the removed entry, or NULL if not found. @@ -188,7 +188,9 @@ Returns the removed entry, or NULL if not found.
`void *hashmap_iter_next(struct hashmap_iter *iter)`::
`void *hashmap_iter_first(struct hashmap *map, struct hashmap_iter *iter)`::

Used to iterate over all entries of a hashmap.
Used to iterate over all entries of a hashmap. Note that it is
not safe to add or remove entries to the hashmap while
iterating.
+
`hashmap_iter_init` initializes a `hashmap_iter` structure.
+

9
sha1_file.c

@ -2371,11 +2371,10 @@ static inline void release_delta_base_cache(struct delta_base_cache_entry *ent) @@ -2371,11 +2371,10 @@ static inline void release_delta_base_cache(struct delta_base_cache_entry *ent)

void clear_delta_base_cache(void)
{
struct hashmap_iter iter;
struct delta_base_cache_entry *entry;
for (entry = hashmap_iter_first(&delta_base_cache, &iter);
entry;
entry = hashmap_iter_next(&iter)) {
struct list_head *lru, *tmp;
list_for_each_safe(lru, tmp, &delta_base_cache_lru) {
struct delta_base_cache_entry *entry =
list_entry(lru, struct delta_base_cache_entry, lru);
release_delta_base_cache(entry);
}
}

Loading…
Cancel
Save