Skip to content

Commit fd95230

Browse files
committed
Merge branch 'mh/clear-topo-walk-upon-reset'
The revision walking machinery uses resources like per-object flag bits that need to be reset before a new iteration of walking begins, but the resources related to topological walk were not cleared correctly, which has been corrected. * mh/clear-topo-walk-upon-reset: revision: free topo_walk_info before creating a new one in init_topo_walk revision: clear the topo-walk flags in reset_revision_walk
2 parents e547e5a + 0aa0c2b commit fd95230

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

revision.c

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3098,7 +3098,7 @@ static void set_children(struct rev_info *revs)
30983098

30993099
void reset_revision_walk(void)
31003100
{
3101-
clear_object_flags(SEEN | ADDED | SHOWN);
3101+
clear_object_flags(SEEN | ADDED | SHOWN | TOPO_WALK_EXPLORED | TOPO_WALK_INDEGREE);
31023102
}
31033103

31043104
static int mark_uninteresting(const struct object_id *oid,
@@ -3211,10 +3211,26 @@ static void compute_indegrees_to_depth(struct rev_info *revs,
32113211
indegree_walk_step(revs);
32123212
}
32133213

3214+
static void reset_topo_walk(struct rev_info *revs)
3215+
{
3216+
struct topo_walk_info *info = revs->topo_walk_info;
3217+
3218+
clear_prio_queue(&info->explore_queue);
3219+
clear_prio_queue(&info->indegree_queue);
3220+
clear_prio_queue(&info->topo_queue);
3221+
clear_indegree_slab(&info->indegree);
3222+
clear_author_date_slab(&info->author_date);
3223+
3224+
FREE_AND_NULL(revs->topo_walk_info);
3225+
}
3226+
32143227
static void init_topo_walk(struct rev_info *revs)
32153228
{
32163229
struct topo_walk_info *info;
32173230
struct commit_list *list;
3231+
if (revs->topo_walk_info)
3232+
reset_topo_walk(revs);
3233+
32183234
revs->topo_walk_info = xmalloc(sizeof(struct topo_walk_info));
32193235
info = revs->topo_walk_info;
32203236
memset(info, 0, sizeof(struct topo_walk_info));

0 commit comments

Comments
 (0)