From a5f965283b1646cdcc8a8006a3f3bef0c3e572f4 Mon Sep 17 00:00:00 2001 From: Ralph Boehme Date: Wed, 21 May 2014 16:59:38 +0200 Subject: [PATCH] fd leak when using appledouble = v2, bug #554 With appledouble = v2 in afp.conf there is an fd leak in certain circumstances while using the Finder, from Daniel Hazelbaker. Signed-off-by: Ralph Boehme --- NEWS | 1 + libatalk/adouble/ad_flush.c | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/NEWS b/NEWS index 6ed64ee6..f6fd71a1 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,7 @@ Changes in 3.1.2 * NEW: afpd: support for using $u username variable in AFP volume definitions. FR#90. * FIX: getvolbypath returns incorrect volume, bug #563 +* FIX: fd leak when using appledouble = v2, bug #554 Changes in 3.1.1 ================ diff --git a/libatalk/adouble/ad_flush.c b/libatalk/adouble/ad_flush.c index 76d44a98..fc95412c 100644 --- a/libatalk/adouble/ad_flush.c +++ b/libatalk/adouble/ad_flush.c @@ -429,6 +429,17 @@ int ad_close(struct adouble *ad, int adflags) } if (adflags & ADFLAGS_RF) { + /* HF is automatically opened when opening an RF, close it. */ + if ((ad->ad_vers == AD_VERSION2) && (ad_meta_fileno(ad) != -1)) { + if (ad->ad_meta_refcount) + ad->ad_meta_refcount--; + if (!(--ad->ad_mdp->adf_refcount)) { + if (close( ad_meta_fileno(ad)) < 0) + err = -1; + ad_meta_fileno(ad) = -1; + } + } + if (ad->ad_reso_refcount) if (--ad->ad_reso_refcount == 0) adf_lock_free(ad->ad_rfp); -- 2.39.2