ad_getattr(ofork->of_ad, &bshort);
if ((bshort & htons(ATTRBIT_NOWRITE)) && (access & OPENACC_WR)) {
ad_close( ofork->of_ad, adflags | ADFLAGS_SETSHRMD);
- of_dealloc(obj, ofork );
+ of_dealloc(ofork);
ofrefnum = 0;
memcpy(rbuf, &ofrefnum, sizeof(ofrefnum));
return(AFPERR_OLOCK);
ofork->of_flags |= AFPFORK_ERROR;
ret = errno;
ad_close( ofork->of_ad, adflags | ADFLAGS_SETSHRMD);
- of_dealloc(obj, ofork );
+ of_dealloc(ofork);
switch (ret) {
case EAGAIN: /* return data anyway */
case EACCES:
return( AFP_OK );
openfork_err:
- of_dealloc(obj, ofork);
+ of_dealloc(ofork);
if (errno == EACCES)
return (access & OPENACC_WR) ? AFPERR_LOCK : AFPERR_ACCESS;
return ret;
char *, uint16_t *, const int,
struct adouble *,
struct stat *);
-extern void of_dealloc (const AFPObj *obj, struct ofork *);
+extern void of_dealloc (struct ofork *);
extern struct ofork *of_find (const uint16_t);
extern struct ofork *of_findname (struct path *);
extern int of_rename (const struct vol *,
}
#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 );
fce_register_file_modification(ofork);
}
- 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;
}