]> wimlib.net Git - wimlib/blobdiff - src/wim.c
Don't unnecessarily rebuild exported metadata resources
[wimlib] / src / wim.c
index 1b66aaf7271ef2fb1bfb2988a1ad4af0f498cf7a..e77d71704ece213305bf3b45e878793692e19813 100644 (file)
--- a/src/wim.c
+++ b/src/wim.c
@@ -325,11 +325,11 @@ select_wim_image(WIMStruct *wim, int image)
                return WIMLIB_ERR_METADATA_NOT_FOUND;
 
        /* If a valid image is currently selected, its metadata can be freed if
-        * it has not been modified.  */
+        * it is not dirty and no other WIMStructs may have it selected.  */
        deselect_current_wim_image(wim);
        wim->current_image = image;
        imd = wim_get_current_image_metadata(wim);
-       if (imd->root_dentry || imd->modified) {
+       if (imd->root_dentry || is_image_dirty(imd)) {
                ret = 0;
        } else {
                ret = read_metadata_resource(imd);
@@ -346,7 +346,7 @@ deselect_current_wim_image(WIMStruct *wim)
        if (wim->current_image == WIMLIB_NO_IMAGE)
                return;
        imd = wim_get_current_image_metadata(wim);
-       if (!imd->modified) {
+       if (!is_image_dirty(imd) && imd->refcnt == 1) {
                wimlib_assert(list_empty(&imd->unhashed_blobs));
                destroy_image_metadata(imd, NULL, false);
        }