It is quite possible that we could have zero refcount entries in the
xprt/rpc_dplx_rec hash table. The code tries to use some atomic flags to
avoid multiple threads freeing the xd/xprt but the code
in svc_xprt_lookup() could end up accessing freed memory. It places a REF
(SVC_REF) under the hash lock, but another process might be trying to
free/destroy the xprt. The code in svc_xprt_lookup() looks for a destroying
flag after releasing the hash lock and by this time there is no guaranty
that the xprt is still valid. The xprt is only valid as long as it is found
in the hash table and we hold the hash lock, correct?
We are able to create a crash consistently, but not sure if this code is
the culprit at this point.
Regards, Malahal.