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) );
if (ad == NULL)
return err;
- LOG(log_debug, logtype_default, "ad_close(%s)", adflags2logstr(adflags));
+ LOG(log_debug, logtype_default,
+ "ad_close(%s): BEGIN [dfd: %d (ref: %d), mfd: %d (ref: %d), rfd: %d (ref: %d)]",
+ adflags2logstr(adflags),
+ ad_data_fileno(ad), ad->ad_data_fork.adf_refcount,
+ ad_meta_fileno(ad), ad->ad_mdp->adf_refcount,
+ ad_reso_fileno(ad), ad->ad_rfp->adf_refcount);
- /* cf ad_open(): we opened the datafork too for sharemode locks */
- if ((ad->ad_vers == AD_VERSION_EA) && (ad->ad_adflags & ADFLAGS_SETSHRMD))
- adflags |= ADFLAGS_DF;
+ 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 */
err = -1;
ad->ad_rlen = 0;
ad_reso_fileno(ad) = -1;
+ adf_lock_free(ad->ad_rfp);
}
}
+ LOG(log_debug, logtype_default,
+ "ad_close(%s): END: %d [dfd: %d (ref: %d), mfd: %d (ref: %d), rfd: %d (ref: %d)]",
+ adflags2logstr(adflags), err,
+ ad_data_fileno(ad), ad->ad_data_fork.adf_refcount,
+ ad_meta_fileno(ad), ad->ad_mdp->adf_refcount,
+ ad_reso_fileno(ad), ad->ad_rfp->adf_refcount);
+
return err;
}