}
#endif
-void of_dealloc(const AFPObj *obj, struct ofork *of)
+void of_dealloc(struct ofork *of)
{
if (!oforks)
return;
if ( of->of_ad->ad_refcount <= 0) {
free( of->of_ad->ad_name );
free( of->of_ad);
- } else {/* someone's still using it. just free this user's locks */
- ad_unlock(of->of_ad, of->of_refnum, of->of_flags & AFPFORK_ERROR ? 0 : 1);
-#ifdef HAVE_FSHARE_T
- if (obj->options.flags & OPTION_SHARE_RESERV) {
- fshare_t shmd;
- shmd.f_id = of->of_refnum;
- if (AD_DATA_OPEN(of->of_ad))
- fcntl(ad_data_fileno(of->of_ad), F_UNSHARE, &shmd);
- if (AD_RSRC_OPEN(of->of_ad))
- fcntl(ad_reso_fileno(of->of_ad), F_UNSHARE, &shmd);
- }
-#endif
}
free( of );
/* Somone has used write_fork, we assume file was changed, register it to file change event api */
if (ofork->of_flags & AFPFORK_MODIFIED) {
- fce_register_file_modification(ofork);
+ struct dir *dir = dirlookup(ofork->of_vol, ofork->of_did);
+ bstring forkpath = bformat("%s/%s", bdata(dir->d_fullpath), of_name(ofork));
+ fce_register(FCE_FILE_MODIFY, bdata(forkpath), NULL, fce_file);
+ bdestroy(forkpath);
}
- of_dealloc(obj, ofork);
+ ad_unlock(ofork->of_ad, ofork->of_refnum, ofork->of_flags & AFPFORK_ERROR ? 0 : 1);
+
+#ifdef HAVE_FSHARE_T
+ if (obj->options.flags & OPTION_SHARE_RESERV) {
+ fshare_t shmd;
+ shmd.f_id = ofork->of_refnum;
+ if (AD_DATA_OPEN(ofork->of_ad))
+ fcntl(ad_data_fileno(ofork->of_ad), F_UNSHARE, &shmd);
+ if (AD_RSRC_OPEN(ofork->of_ad))
+ fcntl(ad_reso_fileno(ofork->of_ad), F_UNSHARE, &shmd);
+ }
+#endif
ret = 0;
if ( ad_close( ofork->of_ad, adflags | ADFLAGS_SETSHRMD) < 0 ) {
ret = -1;
}
+ of_dealloc(ofork);
+
return ret;
}