pack-bitmap: fix leak of haves/wants object lists
When we do a bitmap-aware revision traversal, we create an object_list for each of the "haves" and "wants" tips. After creating the result bitmaps these are no longer needed or used, but we never free the list memory. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
		
				
					committed by
					
						
						Junio C Hamano
					
				
			
			
				
	
			
			
			
						parent
						
							551cf8b655
						
					
				
				
					commit
					acac50dd8c
				
			
							
								
								
									
										9
									
								
								object.c
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								object.c
									
									
									
									
									
								
							@ -307,6 +307,15 @@ int object_list_contains(struct object_list *list, struct object *obj)
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void object_list_free(struct object_list **list)
 | 
			
		||||
{
 | 
			
		||||
	while (*list) {
 | 
			
		||||
		struct object_list *p = *list;
 | 
			
		||||
		*list = p->next;
 | 
			
		||||
		free(p);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * A zero-length string to which object_array_entry::name can be
 | 
			
		||||
 * initialized without requiring a malloc/free.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								object.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								object.h
									
									
									
									
									
								
							@ -151,6 +151,8 @@ struct object_list *object_list_insert(struct object *item,
 | 
			
		||||
 | 
			
		||||
int object_list_contains(struct object_list *list, struct object *obj);
 | 
			
		||||
 | 
			
		||||
void object_list_free(struct object_list **list);
 | 
			
		||||
 | 
			
		||||
/* Object array handling .. */
 | 
			
		||||
void add_object_array(struct object *obj, const char *name, struct object_array *array);
 | 
			
		||||
void add_object_array_with_path(struct object *obj, const char *name, struct object_array *array, unsigned mode, const char *path);
 | 
			
		||||
 | 
			
		||||
@ -787,10 +787,15 @@ struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs)
 | 
			
		||||
	bitmap_git->result = wants_bitmap;
 | 
			
		||||
	bitmap_git->haves = haves_bitmap;
 | 
			
		||||
 | 
			
		||||
	object_list_free(&wants);
 | 
			
		||||
	object_list_free(&haves);
 | 
			
		||||
 | 
			
		||||
	return bitmap_git;
 | 
			
		||||
 | 
			
		||||
cleanup:
 | 
			
		||||
	free_bitmap_index(bitmap_git);
 | 
			
		||||
	object_list_free(&wants);
 | 
			
		||||
	object_list_free(&haves);
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user