Skip to content

Commit

Permalink
revision: use object_array_filter() in implementation of gc_boundary()
Browse files Browse the repository at this point in the history
Use object_array_filter(), which will soon be made smarter about
cleaning up discarded entries properly.  Also add a function comment.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Michael Haggerty authored and Junio C Hamano committed May 28, 2013
1 parent aeb4a51 commit be6754c
Showing 1 changed file with 15 additions and 17 deletions.
32 changes: 15 additions & 17 deletions revision.c
Original file line number Diff line number Diff line change
Expand Up @@ -2435,25 +2435,23 @@ static struct commit *get_revision_1(struct rev_info *revs)
return NULL;
}

static void gc_boundary(struct object_array *array)
/*
* Return true for entries that have not yet been shown. (This is an
* object_array_each_func_t.)
*/
static int entry_unshown(struct object_array_entry *entry, void *cb_data_unused)
{
unsigned nr = array->nr;
unsigned alloc = array->alloc;
struct object_array_entry *objects = array->objects;
return !(entry->item->flags & SHOWN);
}

if (alloc <= nr) {
unsigned i, j;
for (i = j = 0; i < nr; i++) {
if (objects[i].item->flags & SHOWN)
continue;
if (i != j)
objects[j] = objects[i];
j++;
}
for (i = j; i < nr; i++)
objects[i].item = NULL;
array->nr = j;
}
/*
* If array is on the verge of a realloc, garbage-collect any entries
* that have already been shown to try to free up some space.
*/
static void gc_boundary(struct object_array *array)
{
if (array->nr == array->alloc)
object_array_filter(array, entry_unshown, NULL);
}

static void create_boundary_commit_list(struct rev_info *revs)
Expand Down

0 comments on commit be6754c

Please sign in to comment.