The xprt->xp_refcnt is supposed to prevent two destroys in the first place.
If that isn't working correctly, then the atomic_postset is kinda useless
as it could be working on an unknown xprt memory while using the flag,
right?
On Tue, May 14, 2019 at 6:46 PM William Allen Simpson <
william.allen.simpson(a)gmail.com> wrote:
 On 5/14/19 7:19 AM, Madhu P Punjabi wrote:
 > We are seeing crash in svc_release_it().
 > We are using ganesha V2.7.3 and have taken some recent patches for
 ntirpc which includes the patch to avoid leaking FDs "Mark ANYFD clients as
 local clients".
 > We are seeing the following crash repeatedly. Please check the backtrace
 below. Can there be a chance of having the same 'xprt' getting destroyed
 twice in clnt_vc_destroy()? Could this crash be related to it?
 What do the logs say?
 > (gdb) l -
 > 423         /* enforce once-only semantic, trace others */
 > 424         xp_flags = atomic_postset_uint16_t_bits(&xprt->xp_flags,
 > 425
 SVC_XPRT_FLAG_RELEASING);
 > 426         if (xp_flags & SVC_XPRT_FLAG_RELEASING) {
 > 427                 XPRT_TRACE(xprt, "WARNING! already destroying!",
 tag, line);
 > 428                 return;
 > 429         }
 > 430
 > 431         /* Releasing last reference */
 > 432         (*(xprt)->xp_ops->xp_destroy)(xprt, flags, tag, line);
 That atomic_postset should prevent two destroys.  We used to have this
 problem all
 the time (since before I'd joined in 2014), so I'd added that.
 _______________________________________________
 Devel mailing list -- devel(a)lists.nfs-ganesha.org
 To unsubscribe send an email to devel-leave(a)lists.nfs-ganesha.org