]> arthur.barton.de Git - netatalk.git/blobdiff - libatalk/adouble/ad_flush.c
Fix ad_reso_size once more...
[netatalk.git] / libatalk / adouble / ad_flush.c
index a451c1c6839ab85345604b12483eb03a03ad5e5f..3331074b994ee619d7271e7724ed965cb2f76da6 100644 (file)
@@ -254,6 +254,7 @@ static int ad_flush_hf(struct adouble *ad)
                     EC_NEG1_LOG( fchdir(ad_data_fileno(ad)) );
                     EC_ZERO_LOG( sys_lsetxattr(".", AD_EA_META, ad->ad_data, AD_DATASZ_EA, 0) );
                     EC_NEG1_LOG( fchdir(cwd) );
+                    EC_NEG1_LOG( close(cwd) );
                     cwd = -1;
                 } else {
                     EC_ZERO_LOG( sys_fsetxattr(ad_data_fileno(ad), AD_EA_META, ad->ad_data, AD_DATASZ_EA, 0) );
@@ -358,6 +359,9 @@ int ad_close(struct adouble *ad, int adflags)
         ad_meta_fileno(ad), ad->ad_mdp->adf_refcount,
         ad_reso_fileno(ad), ad->ad_rfp->adf_refcount);
 
+    if ((ad->ad_vers == AD_VERSION2) && (adflags & ADFLAGS_RF))
+        adflags |= ADFLAGS_HF;
+
     if ((adflags & ADFLAGS_DF)
         && (ad_data_fileno(ad) >= 0 || ad_data_fileno(ad) == -2) /* -2 means symlink */
         && --ad->ad_data_fork.adf_refcount == 0) {
@@ -382,6 +386,7 @@ int ad_close(struct adouble *ad, int adflags)
                 err = -1;
             ad->ad_rlen = 0;
             ad_reso_fileno(ad) = -1;
+            adf_lock_free(ad->ad_rfp);
         }
     }