Red Hat Bugzilla – Bug 122469
TCP socket dissapears from RPC's svc_fdset
Last modified: 2007-11-30 17:10:42 EST
Description of problem:
A TCP socket episodically dissapears from RPC's server-side svc_fdset
Version-Release number of selected component (if applicable):
Attached demonstration package fails approximately 3 out of 4 times.
Steps to Reproduce:
1. Unpack attached package.
2. See file README_Fedora.
Created attachment 99968 [details]
compressed tar(1)-file of skeletal problem package
See the file README_Fedora
First of all, please note that having side effects in assert ()
macros is very bad idea.
The TCP socket can disappear from svc_fdset during xprt destroy,
which can happen if the xprt_stat is XPRT_DIED.
That can happen if the sender and receiver get out of sync, usually
because an application error.
I'm not willing to debug your code for you.
If even after debugging you still think there is a bug in glibc,
please make really small testcase and explain in detail where do
you think glibc sunrpc starts misbehaving.
Regarding side-effects in assert()s: I'll upload a new version that
doesn't have side-effects in assert()s. It exhibits the same failure
Regarding the TCP socket disappearing from svc_fdset during "xprt
destroy": I'm not sure what you mean by that because I'm not
destroying the RPC transport when the socket disappears.
Regarding the sender and receiver getting out of sync: I believe
you've correctly identified the problem with the networking layer.
Regarding debugging my code: I don't believe it needs to be debugged.
The uploaded code is a very, very small subset of a much larger
program that's been used operationally since about 1994 (at least in
one version or another). The program distributes quasi-realtime data
via the Internet hundreds of sites around the world. The program is
THE top advanced application on Internet2. The uploaded code runs
well under SunOS, HP-UX, IRIX, and FreeBSD and ran well under Linux
and AIX until recently.
Created attachment 100242 [details]
compressed tar(1)-file of problem-exhibiting test code
Has side-effects in assert(3)s removed.
RPC implementations differ. Period. There is no standard. If you
think something should be changed, suggest a change. As Jakub said,
we are not debugging your code and see where it makes assumptions
which differ from what glibc currently does. The best you can do is
to drop RPC and use something sane.
If you have a concrete description of the change you'd like to see,
you can reopen the bug.