Hi I got a bit futher. It seams that the serializing is broken somewhat. If the reads on the server side are like: read() = -1, errorno=EAGAIN (svc_vc.c line 511) read() = 88, (svc_vc.c line 511) read() = 4, (svc_vc.c line 511) it works as it should. And here it doesn't work. read() = 88, (svc_vc.c line 511) read() = 4, (svc_vc.c line 511) read() = -1, errorno=EAGAIN (svc_vc.c line 511) The last read happens because svc_vc_stat returns XPRT_MOREREQS. I'm still investigating why this happens. Maybe the calculation is still wrong somewhere in xdrrec ? The tcpdump looks normal, as expected since mountd fails while reading data, not replying. In __xdrrec_getrec() rstrm->in_received == rstrm->in_received In __xdrrec_getrec() rstrm->in_received == 88 In __xdrrec_getrec() rstrm->last_frag == 1 In __xdrrec_getrec() == TRUE (xdr_rec.c line 645) xdrrec_eof() == FALSE (xdr_rec.c line 517) svc_vc_stat() == XPRT_MOREREQS I've found that we missed in svc_vc_recv() a xdrrec_skiprecord after XDR_DECODE, but that didn't change the behaviour for this bug. if (cd->nonblock) { cd->strm_stat = XPRT_IDLE; if (!__xdrrec_getrec(xdrs, &cd->strm_stat, TRUE)) { return FALSE; } } xdrs->x_op = XDR_DECODE; + (void)xdrrec_skiprecord(xdrs); MartinReceived on Fri May 16 2003 - 15:28:34 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:08 UTC