- if (imd && --imd->refcnt == 0) {
- destroy_image_metadata(imd, table, true);
- FREE(imd);
- }
+ struct blob_descriptor *blob, *tmp;
+
+ if (!imd)
+ return;
+ wimlib_assert(imd->refcnt > 0);
+ if (--imd->refcnt != 0)
+ return;
+ wimlib_assert(imd->selected_refcnt == 0);
+ unload_image_metadata(imd);
+ list_for_each_entry_safe(blob, tmp, &imd->unhashed_blobs, unhashed_list)
+ free_blob_descriptor(blob);
+ free_blob_descriptor(imd->metadata_blob);
+ FREE(imd);