On 16:42, Gerrit Renker wrote: > I would much rather hunt down this bug than revert this patch, since > reverting it > means that almost twice the work is done per each packet and truly > bidirectional > connections are not currently supported.
Agreed. Let's try to find the bug.
> With initial tests here I could not reproduce the bug and had difficulties
> since I have not all required libraries for paraslash.
You only need libssl-dev to reproduce the bug. All the other libraries
are optional and configure should detect what is installed on your
system.
> 1. I see you are using loopback (127.0.0.1) where packets are routed back
> internally: does the bug persist when CCID2 sender and CCID2 receiver
> are on different hosts?
Not so easy to find out because I only have one machine and no
internet at home, and no kernel with dccp support at work. I'll see
what I can do.
> 2. This is using CCID2, which has not been maintained for a while. Can
> you please try CCID 3 also, e.g. by using the following sysctls:
>
> sysctl -w net.dccp.default.rx_ccid=3
> sysctl -w net.dccp.default.tx_ccid=3
> sysctl -w net.dccp.default.tx_qlen=5
> sysctl -w net.dccp.default.seq_window=100
> sysctl -w net.dccp.default.send_ackvec=0
Will do this today in the evening and report again tomorrow.
> 3. Caveat: `Server' listens, `Client' connects. I could not build the
> paraslash app
> due to missing libraries, but found that dccp_recv_open calls connect in
> dccp_recv.c
> while dccp_open() in dccp_send.c calls listen(). It seems that the roles
> are reversed,
> is it possible to swap this in the application and does the problem
> persist?
Well, that's possible, but IMHO does not make much sense: The server
app waits for incoming connections (not neccessary only dccp) and
responds by sending the audio stream to the client. That's how it's
supposed to be, no?
> The BUG is caused via the following chain:
>
> 1. dccp_write_xmit(sk, 0) (due to !block)
> 1. dccp_sendmsg
> 2. ccid2_hc_tx_send_packet -> with hctx->ccid2hctx_pipe >=
> hctx->ccid2hctx_cwnd
> (see above, pipe=cwnd=1) ==> returns 1
> 3. in dccp_write_xmit(sk, 0):
> if (!block) { /* this is true here */
> sk_reset_timer(sk, &dp->dccps_xmit_timer,
> msecs_to_jiffies(err)+jiffies)
> ==> BUG()
> | <7>dccp_set_state: listen(c1580030) LISTEN -> CLOSED
> This may be a clue: this socket has not gone past listen state (i.e. not
> entered server)
Yes, the bug happens in para_server just at the moment the first client
connects. No data is transfered to the client. I'll look into the kernel
dccp code a bit this evening as well.
Thanks for your help
Andre
--
The only person who always got his work done by Friday was Robinson Crusoe
signature.asc
Description: Digital signature

