How to reproduce:
1. Start browser-download (content-disposition: attachment) of some big file 
through H2
* Tested with 1Gb file and several Chrome-versions (67-)
2. Make reload
3. Process with this connection would stay, transfer everything successfully 
and even send to log info about code-200 full-size transfer without any 
termination flags
4. Chrome would show "Network error" at the end of transfer

Versions:
1.8.17 - it happens in all cases
#c4d56e5 - looks like it happens only in some conditions, but just because 
there is another bug that makes old processes stay much longer than with 1.8.17

Fix:
For 1.8.17 I just disabled condition "if (sess && unlikely(sess->fe->state == 
PR_STSTOPPED))" leading to h2c_send_goaway_error() in mux_h2.c:2330
It is not correct way and probably breaks something else, but fixes this

Tcpdump for end of failed download:
04:28:16.947674 IP client.example.com.53228 > server.example.com.https: Flags 
[.], ack 1189837535, win 3645, length 0
04:28:16.947685 IP server.example.com.https > client.example.com.53228: Flags 
[.], seq 1190016095:1190018975, ack 22882, win 254, length 2880
04:28:16.947695 IP server.example.com.https > client.example.com.53228: Flags 
[.], seq 1190018975:1190021855, ack 22882, win 254, length 2880
04:28:16.950105 IP client.example.com.53228 > server.example.com.https: Flags 
[.], ack 1189843295, win 3645, length 0
04:28:16.950117 IP server.example.com.https > client.example.com.53228: Flags 
[.], seq 1190021855:1190024735, ack 22882, win 254, length 2880
04:28:16.950127 IP server.example.com.https > client.example.com.53228: Flags 
[.], seq 1190024735:1190027615, ack 22882, win 254, length 2880
04:28:16.952186 IP client.example.com.53228 > server.example.com.https: Flags 
[.], ack 1189847615, win 3645, length 0
04:28:16.952194 IP server.example.com.https > client.example.com.53228: Flags 
[.], seq 1190027615:1190030495, ack 22882, win 254, length 2880
04:28:16.952202 IP server.example.com.https > client.example.com.53228: Flags 
[.], seq 1190030495:1190033375, ack 22882, win 254, length 2880
04:28:16.954424 IP client.example.com.53228 > server.example.com.https: Flags 
[.], ack 1189853375, win 3645, length 0
04:28:16.954430 IP server.example.com.https > client.example.com.53228: Flags 
[.], seq 1190033375:1190036255, ack 22882, win 254, length 2880
04:28:16.954438 IP server.example.com.https > client.example.com.53228: Flags 
[.], seq 1190036255:1190039135, ack 22882, win 254, length 2880
04:28:16.954441 IP client.example.com.53228 > server.example.com.https: Flags 
[P.], seq 22882:22924, ack 1189853375, win 3645, length 42
04:28:16.954496 IP server.example.com.https > client.example.com.53228: Flags 
[R], seq 1015944401, win 0, length 0
04:28:16.954690 IP client.example.com.53228 > server.example.com.https: Flags 
[.], ack 1189856255, win 3645, length 0
04:28:16.954704 IP server.example.com.https > client.example.com.53228: Flags 
[R], seq 1015947281, win 0, length 0
04:28:16.959056 IP client.example.com.53228 > server.example.com.https: Flags 
[.], ack 1189862015, win 3645, length 0
...

---
Wert








Reply via email to