| 581 | } |
| 582 | |
| 583 | void parsed_object_pool_clear(struct parsed_object_pool *o) |
| 584 | { |
| 585 | /* |
| 586 | * As objects are allocated in slabs (see alloc.c), we do |
| 587 | * not need to free each object, but each slab instead. |
| 588 | * |
| 589 | * Before doing so, we need to free any additional memory |
| 590 | * the objects may hold. |
| 591 | */ |
| 592 | unsigned i; |
| 593 | |
| 594 | for (i = 0; i < o->obj_hash_size; i++) { |
| 595 | struct object *obj = o->obj_hash[i]; |
| 596 | |
| 597 | if (!obj) |
| 598 | continue; |
| 599 | |
| 600 | if (obj->type == OBJ_TREE) |
| 601 | free_tree_buffer((struct tree*)obj); |
| 602 | else if (obj->type == OBJ_COMMIT) |
| 603 | release_commit_memory(o, (struct commit*)obj); |
| 604 | else if (obj->type == OBJ_TAG) |
| 605 | release_tag_memory((struct tag*)obj); |
| 606 | } |
| 607 | |
| 608 | FREE_AND_NULL(o->obj_hash); |
| 609 | o->obj_hash_size = 0; |
| 610 | |
| 611 | free_commit_buffer_slab(o->buffer_slab); |
| 612 | o->buffer_slab = NULL; |
| 613 | |
| 614 | parsed_object_pool_reset_commit_grafts(o); |
| 615 | alloc_state_free_and_null(&o->blob_state); |
| 616 | alloc_state_free_and_null(&o->tree_state); |
| 617 | alloc_state_free_and_null(&o->commit_state); |
| 618 | alloc_state_free_and_null(&o->tag_state); |
| 619 | alloc_state_free_and_null(&o->object_state); |
| 620 | stat_validity_clear(o->shallow_stat); |
| 621 | FREE_AND_NULL(o->shallow_stat); |
| 622 | } |
no test coverage detected