Project-Faster / qpep

A working version of qpep standalone go client/server, designed to accelerate high-latency connections, like those provided by geostationary satellites.
https://docs.projectfaster.org
Other
3 stars 1 forks source link

Concurrent Map Writes during speed tests crash Server mode #49

Closed parvit closed 1 year ago

parvit commented 1 year ago

As reported by @mfoxworthy:

fatal error: concurrent map writes

goroutine 16421 [running]:
runtime.throw({0x9817f2?, 0x887545?})
    /opt/go_1.18.10/src/runtime/panic.go:992 +0x71 fp=0xc000395cb0 sp=0xc000395c80 pc=0x436511
runtime.mapassign_faststr(0x8ef360?, 0xc00007b8c0?, {0xc0007d9120, 0x1f})
    /opt/go_1.18.10/src/runtime/map_faststr.go:212 +0x39c fp=0xc000395d18 sp=0xc000395cb0 pc=0x41579c
github.com/parvit/qpep/api.(*statistics).IncrementCounter(0x11cfdc0, 0x3ff0000000000000, {0x97ee1d?, 0x979ef7?}, {0xc000395e70?, 0xc00032c210?, 0x13?})
    /mnt/dev/src/github.com/parvit/qpep-faster/api/statistics.go:188 +0x119 fp=0xc000395d98 sp=0xc000395d18 pc=0x888079
github.com/parvit/qpep/server.handleQuicStream({0x7fa5ececfab0?, 0xc0000003c0})
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:109 +0x69b fp=0xc000395f88 sp=0xc000395d98 pc=0x88ea5b
github.com/parvit/qpep/server.listenQuicConn.func2()
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:53 +0x79 fp=0xc000395fe0 sp=0xc000395f88 pc=0x88e2d9
runtime.goexit()
    /opt/go_1.18.10/src/runtime/asm_amd64.s:1571 +0x1 fp=0xc000395fe8 sp=0xc000395fe0 pc=0x4660c1
created by github.com/parvit/qpep/server.listenQuicConn
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:51 +0x4e

goroutine 1 [chan receive, 100 minutes]:
github.com/parvit/kardianos-service.(*systemd).Run.func1()
    /root/go/pkg/mod/github.com/parvit/kardianos-service@v0.0.0-20220822101756-89fc969969b8/service_systemd_linux.go:231 +0x88
github.com/parvit/kardianos-service.(*systemd).Run(0xc00007bcb0)
    /root/go/pkg/mod/github.com/parvit/kardianos-service@v0.0.0-20220822101756-89fc969969b8/service_systemd_linux.go:232 +0x92
github.com/parvit/qpep/service.ServiceMain()
    /mnt/dev/src/github.com/parvit/qpep-faster/service/service.go:179 +0x83f
main.main()
    /mnt/dev/src/github.com/parvit/qpep-faster/main.go:23 +0x3f

goroutine 6 [select]:
github.com/parvit/qpep/service.(*QPepService).Main(0xc00006a600)
    /mnt/dev/src/github.com/parvit/qpep-faster/service/service.go:257 +0x275
created by github.com/parvit/qpep/service.(*QPepService).Start
    /mnt/dev/src/github.com/parvit/qpep-faster/service/service.go:194 +0x85

goroutine 8 [syscall, 100 minutes]:
os/signal.signal_recv()
    /opt/go_1.18.10/src/runtime/sigqueue.go:151 +0x2f
os/signal.loop()
    /opt/go_1.18.10/src/os/signal/signal_unix.go:23 +0x19
created by os/signal.Notify.func1.1
    /opt/go_1.18.10/src/os/signal/signal.go:151 +0x2a

goroutine 18 [IO wait, 100 minutes]:
internal/poll.runtime_pollWait(0x7fa5ee767ff8, 0x72)
    /opt/go_1.18.10/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc0000b8100?, 0x0?, 0x0)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Accept(0xc0000b8100)
    /opt/go_1.18.10/src/internal/poll/fd_unix.go:614 +0x22c
net.(*netFD).accept(0xc0000b8100)
    /opt/go_1.18.10/src/net/fd_unix.go:172 +0x35
net.(*TCPListener).accept(0xc0000c8048)
    /opt/go_1.18.10/src/net/tcpsock_posix.go:139 +0x28
net.(*TCPListener).Accept(0xc0000c8048)
    /opt/go_1.18.10/src/net/tcpsock.go:288 +0x3d
net/http.(*Server).Serve(0xc0000d2000, {0xa46390, 0xc0000c8048})
    /opt/go_1.18.10/src/net/http/server.go:3039 +0x385
net/http.(*Server).ListenAndServe(0xc0000d2000)
    /opt/go_1.18.10/src/net/http/server.go:2968 +0x7d
github.com/parvit/qpep/api.RunServer({0xa468f8?, 0xc00006a5c0}, 0xc000021340, 0x1)
    /mnt/dev/src/github.com/parvit/qpep-faster/api/router.go:83 +0x2c8
created by github.com/parvit/qpep/service.(*QPepService).Main
    /mnt/dev/src/github.com/parvit/qpep-faster/service/service.go:244 +0x118

goroutine 19 [select]:
github.com/parvit/qpep/server.RunServer({0xa468f8, 0xc00006a5c0}, 0x0?)
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server.go:79 +0x2e5
created by github.com/parvit/qpep/service.runAsServer
    /mnt/dev/src/github.com/parvit/qpep-faster/service/service.go:289 +0xa5

goroutine 20 [IO wait]:
internal/poll.runtime_pollWait(0x7fa5ee767f08, 0x72)
    /opt/go_1.18.10/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc0002aa000?, 0xc000036f00?, 0x0)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Accept(0xc0002aa000)
    /opt/go_1.18.10/src/internal/poll/fd_unix.go:614 +0x22c
net.(*netFD).accept(0xc0002aa000)
    /opt/go_1.18.10/src/net/fd_unix.go:172 +0x35
net.(*TCPListener).accept(0xc00029e018)
    /opt/go_1.18.10/src/net/tcpsock_posix.go:139 +0x28
net.(*TCPListener).Accept(0xc00029e018)
    /opt/go_1.18.10/src/net/tcpsock.go:288 +0x3d
net/http.(*Server).Serve(0xc00029c000, {0xa46390, 0xc00029e018})
    /opt/go_1.18.10/src/net/http/server.go:3039 +0x385
net/http.(*Server).ListenAndServe(0xc00029c000)
    /opt/go_1.18.10/src/net/http/server.go:2968 +0x7d
github.com/parvit/qpep/api.RunServer({0xa468f8?, 0xc00006a5c0}, 0xc000021340, 0x0)
    /mnt/dev/src/github.com/parvit/qpep-faster/api/router.go:83 +0x2c8
created by github.com/parvit/qpep/service.runAsServer
    /mnt/dev/src/github.com/parvit/qpep-faster/service/service.go:290 +0x105

goroutine 21 [chan receive, 100 minutes]:
github.com/parvit/qpep/api.RunServer.func1()
    /mnt/dev/src/github.com/parvit/qpep-faster/api/router.go:75 +0x7a
created by github.com/parvit/qpep/api.RunServer
    /mnt/dev/src/github.com/parvit/qpep-faster/api/router.go:73 +0x2bb

goroutine 34 [chan receive, 100 minutes]:
github.com/parvit/qpep/api.RunServer.func1()
    /mnt/dev/src/github.com/parvit/qpep-faster/api/router.go:75 +0x7a
created by github.com/parvit/qpep/api.RunServer
    /mnt/dev/src/github.com/parvit/qpep-faster/api/router.go:73 +0x2bb

goroutine 22 [IO wait]:
internal/poll.runtime_pollWait(0x7fa5ee767e18, 0x72)
    /opt/go_1.18.10/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc000118100?, 0xc000057c98?, 0x0)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).RawRead(0xc000118100, 0xc0000211d0)
    /opt/go_1.18.10/src/internal/poll/fd_unix.go:766 +0x145
net.(*rawConn).Read(0xc000010070, 0x81a40a?)
    /opt/go_1.18.10/src/net/rawconn.go:43 +0x45
golang.org/x/net/internal/socket.(*syscaller).recvmmsg(0xc00016a048, {0xa46420?, 0xc000010070?}, {0xc000138600?, 0x9b8e80?, 0x0?}, 0x4390e0?)
    /root/go/pkg/mod/golang.org/x/net@v0.6.0/internal/socket/mmsghdr_unix.go:121 +0x94
golang.org/x/net/internal/socket.(*Conn).recvMsgs(0xc00002e600, {0xc00014e2c0?, 0x8, 0x8}, 0xc0007f8390?)
    /root/go/pkg/mod/golang.org/x/net@v0.6.0/internal/socket/rawconn_mmsg.go:25 +0x185
golang.org/x/net/internal/socket.(*Conn).RecvMsgs(...)
    /root/go/pkg/mod/golang.org/x/net@v0.6.0/internal/socket/socket.go:267
golang.org/x/net/ipv4.(*payloadHandler).ReadBatch(0xc000218010, {0xc00014e2c0?, 0xc000057e58?, 0x8443c6?}, 0xc0005529c0?)
    /root/go/pkg/mod/golang.org/x/net@v0.6.0/ipv4/batch.go:80 +0x57
github.com/Project-Faster/quic-go.(*oobConn).ReadPacket(0xc000118180)
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/sys_conn_oob.go:154 +0x6b5
github.com/Project-Faster/quic-go.(*packetHandlerMap).listen(0xc0001522c0)
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/packet_handler_map.go:366 +0x70
created by github.com/Project-Faster/quic-go.newPacketHandlerMap
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/packet_handler_map.go:144 +0x356

goroutine 23 [select, 100 minutes]:
github.com/Project-Faster/quic-go.(*packetHandlerMap).runCloseQueue(0xc0001522c0)
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/packet_handler_map.go:279 +0x14e
created by github.com/Project-Faster/quic-go.newPacketHandlerMap
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/packet_handler_map.go:145 +0x396

goroutine 50 [select, 3 minutes]:
github.com/Project-Faster/quic-go.(*baseServer).run(0xc000240000)
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/server.go:232 +0xe6
created by github.com/Project-Faster/quic-go.listen
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/server.go:218 +0x596

goroutine 51 [select, 3 minutes]:
github.com/Project-Faster/quic-go.(*baseServer).accept(0xc000240000, {0xa46930, 0xc000024090})
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/server.go:250 +0xa9
github.com/Project-Faster/quic-go.(*baseServer).Accept(0x0?, {0xa46930?, 0xc000024090?})
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/server.go:246 +0x25
github.com/parvit/qpep/server.listenQuicSession()
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:26 +0x67
created by github.com/parvit/qpep/server.RunServer
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server.go:72 +0x1a5

goroutine 52 [select]:
github.com/parvit/qpep/server.performanceWatcher({0xa468f8, 0xc00006a000})
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server.go:127 +0xdb
created by github.com/parvit/qpep/server.RunServer
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server.go:75 +0x20d

goroutine 14051 [select]:
github.com/Project-Faster/quic-go.(*incomingStreamsMap[...]).AcceptStream(0xc00017c070, {0xa46930, 0xc000024090})
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/streams_map_incoming.go:82 +0x125
github.com/Project-Faster/quic-go.(*streamsMap).AcceptStream(0xc000400660, {0xa46930, 0xc000024090})
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/streams_map.go:177 +0xea
github.com/Project-Faster/quic-go.(*connection).AcceptStream(0xc001294f68?, {0xa46930?, 0xc000024090?})
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/connection.go:2045 +0x2f
github.com/parvit/qpep/server.listenQuicConn({0xa48c40, 0xc000047800})
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:44 +0x72
created by github.com/parvit/qpep/server.listenQuicSession
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:31 +0x45

goroutine 13921 [select]:
github.com/Project-Faster/quic-go.(*sendQueue).Run(0xc000236150)
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/send_queue.go:67 +0xff
github.com/Project-Faster/quic-go.(*connection).run.func2()
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/connection.go:533 +0x2b
created by github.com/Project-Faster/quic-go.(*connection).run
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/connection.go:532 +0x1be

goroutine 16422 [semacquire]:
sync.runtime_Semacquire(0xc0004bb930?)
    /opt/go_1.18.10/src/runtime/sema.go:56 +0x25
sync.(*WaitGroup).Wait(0xa46930?)
    /opt/go_1.18.10/src/sync/waitgroup.go:136 +0x52
github.com/parvit/qpep/server.handleQuicStream({0x7fa5ececfab0?, 0xc0000005a0})
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:128 +0x9fc
github.com/parvit/qpep/server.listenQuicConn.func2()
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:53 +0x79
created by github.com/parvit/qpep/server.listenQuicConn
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:51 +0x4e

goroutine 16436 [running]:
    goroutine running on other thread; stack unavailable
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:120 +0x89c

goroutine 13918 [select]:
github.com/Project-Faster/quic-go.(*connection).run(0xc000047800)
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/connection.go:588 +0x54f
created by github.com/Project-Faster/quic-go.(*baseServer).handleInitialImpl
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/server.go:518 +0x674

goroutine 16407 [runnable]:
io.CopyBuffer({0x7fa5ec63c008?, 0xc000000960?}, {0xa425c0?, 0xc000182c78?}, {0xc000f0e000?, 0x80000?, 0x80000?})
    /opt/go_1.18.10/src/io/io.go:395 +0x85
github.com/parvit/qpep/server.handleTcpToQuic({0xa468f8, 0xc000550580}, 0x43fee5?, 0x0, {0x7fa5ececfab0?, 0xc000000960}, {0xa48610?, 0xc000544298}, {0xc000543db0, 0xd})
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:245 +0x396
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:121 +0x9ac

goroutine 16408 [chan receive]:
github.com/parvit/qpep/server.handleQuicStream.func3()
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:123 +0x36
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:122 +0x9ef

goroutine 16298 [IO wait]:
internal/poll.runtime_pollWait(0x7fa5ec3b6aa8, 0x72)
    /opt/go_1.18.10/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc000324d80?, 0xc000198000?, 0x0)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc000324d80, {0xc000198000, 0x1000, 0x1000})
    /opt/go_1.18.10/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000324d80, {0xc000198000?, 0x0?, 0x1?})
    /opt/go_1.18.10/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc00081c260, {0xc000198000?, 0x72320c?, 0xc0007f6040?})
    /opt/go_1.18.10/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc000820360, {0xc000198000, 0x1000, 0x1000})
    /opt/go_1.18.10/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc00130a8a0)
    /opt/go_1.18.10/src/bufio/bufio.go:106 +0x103
bufio.(*Reader).ReadSlice(0xc00130a8a0, 0x0?)
    /opt/go_1.18.10/src/bufio/bufio.go:371 +0x2f
bufio.(*Reader).ReadLine(0xc00130a8a0)
    /opt/go_1.18.10/src/bufio/bufio.go:400 +0x27
net/textproto.(*Reader).readLineSlice(0xc0000a3680)
    /opt/go_1.18.10/src/net/textproto/reader.go:57 +0x99
net/textproto.(*Reader).ReadLine(...)
    /opt/go_1.18.10/src/net/textproto/reader.go:38
net/http.readRequest(0xc00081c260?)
    /opt/go_1.18.10/src/net/http/request.go:1029 +0x79
net/http.(*conn).readRequest(0xc00027a1e0, {0xa468f8, 0xc000813140})
    /opt/go_1.18.10/src/net/http/server.go:988 +0x24a
net/http.(*conn).serve(0xc00027a1e0, {0xa469a0, 0xc0002981b0})
    /opt/go_1.18.10/src/net/http/server.go:1891 +0x32b
created by net/http.(*Server).Serve
    /opt/go_1.18.10/src/net/http/server.go:3071 +0x4db

goroutine 16434 [chan receive]:
github.com/parvit/qpep/server.handleQuicStream.func3()
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:123 +0x36
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:122 +0x9ef

goroutine 16385 [runnable]:
github.com/parvit/qpep/server.handleTcpToQuic({0xa468f8, 0xc00069d140}, 0x43fee5?, 0x0, {0x7fa5ececfab0?, 0xc000000780}, {0xa48610?, 0xc00068ad00}, {0xc0006a0c40, 0xd})
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:217 +0xfe
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:121 +0x9ac

goroutine 16400 [select]:
github.com/Project-Faster/quic-go.(*receiveStream).readImpl(0xc0003341e0, {0xc0004f6000, 0x8000, 0x8000})
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/receive_stream.go:155 +0x74d
github.com/Project-Faster/quic-go.(*receiveStream).Read(0xc0003341e0, {0xc0004f6000, 0x8000, 0x8000})
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/receive_stream.go:90 +0xdd
io.(*LimitedReader).Read(0xc0001c9128, {0xc0004f6000?, 0xc0004bb210?, 0xc000047c00?})
    /opt/go_1.18.10/src/io/io.go:476 +0x45
io.copyBuffer({0xa43460, 0xc0004bb210}, {0xa425c0, 0xc0001c9128}, {0x0, 0x0, 0x0})
    /opt/go_1.18.10/src/io/io.go:426 +0x1b2
io.Copy(...)
    /opt/go_1.18.10/src/io/io.go:385
net.genericReadFrom({0xa427a0?, 0xc0004816e8?}, {0xa425c0, 0xc0001c9128})
    /opt/go_1.18.10/src/net/net.go:662 +0x6a
net.(*TCPConn).readFrom(0xc0004816e8, {0xa425c0, 0xc0001c9128})
    /opt/go_1.18.10/src/net/tcpsock_posix.go:54 +0x78
net.(*TCPConn).ReadFrom(0xc0004816e8, {0xa425c0?, 0xc0001c9128?})
    /opt/go_1.18.10/src/net/tcpsock.go:130 +0x36
io.copyBuffer({0xa427a0, 0xc0004816e8}, {0xa425c0, 0xc0001c9128}, {0xc000c8e000, 0x80000, 0x80000})
    /opt/go_1.18.10/src/io/io.go:412 +0x14b
io.CopyBuffer({0xa427a0?, 0xc0004816e8?}, {0xa425c0?, 0xc0001c9128?}, {0xc000c8e000?, 0x1?, 0xc0008e79e0?})
    /opt/go_1.18.10/src/io/io.go:399 +0x3c
github.com/parvit/qpep/server.handleQuicToTcp({0xa468f8, 0xc0004a9bc0}, 0x43fee5?, 0x0, {0xa48610?, 0xc0004816e8}, {0x7fa5ececfab0?, 0xc0003341e0}, {0xc00009a3c0, 0x13}, ...)
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:186 +0x3d6
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:120 +0x89c

goroutine 16363 [chan receive]:
github.com/parvit/qpep/server.handleQuicStream.func3()
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:123 +0x36
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:122 +0x9ef

goroutine 16362 [IO wait]:
internal/poll.runtime_pollWait(0x7fa5ecec85f8, 0x72)
    /opt/go_1.18.10/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc000118700?, 0xc000968000?, 0x0)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc000118700, {0xc000968000, 0x80000, 0x80000})
    /opt/go_1.18.10/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000118700, {0xc000968000?, 0x0?, 0xc00defd520?})
    /opt/go_1.18.10/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc0004f5e78, {0xc000968000?, 0xc0002e3d01?, 0xc00008e1e0?})
    /opt/go_1.18.10/src/net/net.go:183 +0x45
io.(*LimitedReader).Read(0xc0001c8f60, {0xc000968000?, 0xc00008e1e0?, 0xc0002e3e50?})
    /opt/go_1.18.10/src/io/io.go:476 +0x45
io.copyBuffer({0x7fa5ec63c008, 0xc00008e1e0}, {0xa425c0, 0xc0001c8f60}, {0xc000968000, 0x80000, 0x80000})
    /opt/go_1.18.10/src/io/io.go:426 +0x1b2
io.CopyBuffer({0x7fa5ec63c008?, 0xc00008e1e0?}, {0xa425c0?, 0xc0001c8f60?}, {0xc000968000?, 0xc0008401e0?, 0x2a0000000097d8ac?})
    /opt/go_1.18.10/src/io/io.go:399 +0x3c
github.com/parvit/qpep/server.handleTcpToQuic({0xa468f8, 0xc0008457c0}, 0x43fee5?, 0x0, {0x7fa5ececfab0?, 0xc00008e1e0}, {0xa48610?, 0xc0004f5e78}, {0xc000849fb0, 0xd})
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:245 +0x396
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:121 +0x9ac

goroutine 16325 [select]:
github.com/Project-Faster/quic-go.(*receiveStream).readImpl(0xc00008ef00, {0xc000a34000, 0x8000, 0x8000})
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/receive_stream.go:155 +0x74d
github.com/Project-Faster/quic-go.(*receiveStream).Read(0xc00008ef00, {0xc000a34000, 0x8000, 0x8000})
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/receive_stream.go:90 +0xdd
io.(*LimitedReader).Read(0xc000182288, {0xc000a34000?, 0xc0004d5240?, 0xc000046800?})
    /opt/go_1.18.10/src/io/io.go:476 +0x45
io.copyBuffer({0xa43460, 0xc0004d5240}, {0xa425c0, 0xc000182288}, {0x0, 0x0, 0x0})
    /opt/go_1.18.10/src/io/io.go:426 +0x1b2
io.Copy(...)
    /opt/go_1.18.10/src/io/io.go:385
net.genericReadFrom({0xa427a0?, 0xc000287040?}, {0xa425c0, 0xc000182288})
    /opt/go_1.18.10/src/net/net.go:662 +0x6a
net.(*TCPConn).readFrom(0xc000287040, {0xa425c0, 0xc000182288})
    /opt/go_1.18.10/src/net/tcpsock_posix.go:54 +0x78
net.(*TCPConn).ReadFrom(0xc000287040, {0xa425c0?, 0xc000182288?})
    /opt/go_1.18.10/src/net/tcpsock.go:130 +0x36
io.copyBuffer({0xa427a0, 0xc000287040}, {0xa425c0, 0xc000182288}, {0xc003480000, 0x80000, 0x80000})
    /opt/go_1.18.10/src/io/io.go:412 +0x14b
io.CopyBuffer({0xa427a0?, 0xc000287040?}, {0xa425c0?, 0xc000182288?}, {0xc003480000?, 0x0?, 0xc0004c7da0?})
    /opt/go_1.18.10/src/io/io.go:399 +0x3c
github.com/parvit/qpep/server.handleQuicToTcp({0xa468f8, 0xc00089d3c0}, 0x43fee5?, 0x0, {0xa48610?, 0xc000287040}, {0x7fa5ececfab0?, 0xc00008ef00}, {0xc0002b28d0, 0x13}, ...)
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:186 +0x3d6
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:120 +0x89c

goroutine 16384 [semacquire]:
io.copyBuffer({0xa43460, 0xc000699a90}, {0xa425c0, 0xc0003530c8}, {0x0, 0x0, 0x0})
    /opt/go_1.18.10/src/io/io.go:423 +0x117
io.Copy(...)
    /opt/go_1.18.10/src/io/io.go:385
net.genericReadFrom({0xa427a0?, 0xc00068ad00?}, {0xa425c0, 0xc0003530c8})
    /opt/go_1.18.10/src/net/net.go:662 +0x6a
net.(*TCPConn).readFrom(0xc00068ad00, {0xa425c0, 0xc0003530c8})
    /opt/go_1.18.10/src/net/tcpsock_posix.go:54 +0x78
net.(*TCPConn).ReadFrom(0xc00068ad00, {0xa425c0?, 0xc0003530c8?})
    /opt/go_1.18.10/src/net/tcpsock.go:130 +0x36
io.copyBuffer({0xa427a0, 0xc00068ad00}, {0xa425c0, 0xc0003530c8}, {0xc000e0e000, 0x80000, 0x80000})
    /opt/go_1.18.10/src/io/io.go:412 +0x14b
io.CopyBuffer({0xa427a0?, 0xc00068ad00?}, {0xa425c0?, 0xc0003530c8?}, {0xc000e0e000?, 0x1?, 0xc0008e75c0?})
    /opt/go_1.18.10/src/io/io.go:399 +0x3c
github.com/parvit/qpep/server.handleQuicToTcp({0xa468f8, 0xc00069d140}, 0x43fee5?, 0x0, {0xa48610?, 0xc00068ad00}, {0x7fa5ececfab0?, 0xc000000780}, {0xc0002b2480, 0x13}, ...)
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:186 +0x3d6
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:120 +0x89c

goroutine 16323 [semacquire]:
sync.runtime_Semacquire(0xc0008a0d30?)
    /opt/go_1.18.10/src/runtime/sema.go:56 +0x25
sync.(*WaitGroup).Wait(0xa46930?)
    /opt/go_1.18.10/src/sync/waitgroup.go:136 +0x52
github.com/parvit/qpep/server.handleQuicStream({0x7fa5ececfab0?, 0xc00008ef00})
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:128 +0x9fc
github.com/parvit/qpep/server.listenQuicConn.func2()
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:53 +0x79
created by github.com/parvit/qpep/server.listenQuicConn
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:51 +0x4e

goroutine 16398 [semacquire]:
sync.runtime_Semacquire(0xc0004bb200?)
    /opt/go_1.18.10/src/runtime/sema.go:56 +0x25
sync.(*WaitGroup).Wait(0xa46930?)
    /opt/go_1.18.10/src/sync/waitgroup.go:136 +0x52
github.com/parvit/qpep/server.handleQuicStream({0x7fa5ececfab0?, 0xc0003341e0})
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:128 +0x9fc
github.com/parvit/qpep/server.listenQuicConn.func2()
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:53 +0x79
created by github.com/parvit/qpep/server.listenQuicConn
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:51 +0x4e

goroutine 16389 [select]:
github.com/Project-Faster/quic-go.(*receiveStream).readImpl(0xc000334000, {0xc0003bc000, 0x8000, 0x8000})
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/receive_stream.go:155 +0x74d
github.com/Project-Faster/quic-go.(*receiveStream).Read(0xc000334000, {0xc0003bc000, 0x8000, 0x8000})
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/receive_stream.go:90 +0xdd
io.(*LimitedReader).Read(0xc0001c8d20, {0xc0003bc000?, 0xc0003acd80?, 0xc000046800?})
    /opt/go_1.18.10/src/io/io.go:476 +0x45
io.copyBuffer({0xa43460, 0xc0003acd80}, {0xa425c0, 0xc0001c8d20}, {0x0, 0x0, 0x0})
    /opt/go_1.18.10/src/io/io.go:426 +0x1b2
io.Copy(...)
    /opt/go_1.18.10/src/io/io.go:385
net.genericReadFrom({0xa427a0?, 0xc000229fc8?}, {0xa425c0, 0xc0001c8d20})
    /opt/go_1.18.10/src/net/net.go:662 +0x6a
net.(*TCPConn).readFrom(0xc000229fc8, {0xa425c0, 0xc0001c8d20})
    /opt/go_1.18.10/src/net/tcpsock_posix.go:54 +0x78
net.(*TCPConn).ReadFrom(0xc000229fc8, {0xa425c0?, 0xc0001c8d20?})
    /opt/go_1.18.10/src/net/tcpsock.go:130 +0x36
io.copyBuffer({0xa427a0, 0xc000229fc8}, {0xa425c0, 0xc0001c8d20}, {0xc000b8e000, 0x80000, 0x80000})
    /opt/go_1.18.10/src/io/io.go:412 +0x14b
io.CopyBuffer({0xa427a0?, 0xc000229fc8?}, {0xa425c0?, 0xc0001c8d20?}, {0xc000b8e000?, 0x0?, 0xc0002cf980?})
    /opt/go_1.18.10/src/io/io.go:399 +0x3c
github.com/parvit/qpep/server.handleQuicToTcp({0xa468f8, 0xc0003a4c80}, 0x43fee5?, 0x0, {0xa48610?, 0xc000229fc8}, {0x7fa5ececfab0?, 0xc000334000}, {0xc00009a270, 0x13}, ...)
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:186 +0x3d6
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:120 +0x89c

goroutine 16424 [semacquire]:
sync.runtime_Semacquire(0xc000556430?)
    /opt/go_1.18.10/src/runtime/sema.go:56 +0x25
sync.(*WaitGroup).Wait(0xa46930?)
    /opt/go_1.18.10/src/sync/waitgroup.go:136 +0x52
github.com/parvit/qpep/server.handleQuicStream({0x7fa5ececfab0?, 0xc000000960})
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:128 +0x9fc
github.com/parvit/qpep/server.listenQuicConn.func2()
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:53 +0x79
created by github.com/parvit/qpep/server.listenQuicConn
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:51 +0x4e

goroutine 16305 [IO wait]:
internal/poll.runtime_pollWait(0x7fa5ecec8aa8, 0x72)
    /opt/go_1.18.10/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc000118500?, 0xc000254000?, 0x0)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc000118500, {0xc000254000, 0x1000, 0x1000})
    /opt/go_1.18.10/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000118500, {0xc000254000?, 0xc000446420?, 0x47049e?})
    /opt/go_1.18.10/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc0004f4420, {0xc000254000?, 0x72320c?, 0xc001a7a880?})
    /opt/go_1.18.10/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc0001d9b00, {0xc000254000, 0x1000, 0x1000})
    /opt/go_1.18.10/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc00e27af60)
    /opt/go_1.18.10/src/bufio/bufio.go:106 +0x103
bufio.(*Reader).ReadSlice(0xc00e27af60, 0x0?)
    /opt/go_1.18.10/src/bufio/bufio.go:371 +0x2f
bufio.(*Reader).ReadLine(0xc00e27af60)
    /opt/go_1.18.10/src/bufio/bufio.go:400 +0x27
net/textproto.(*Reader).readLineSlice(0xc0001d9b30)
    /opt/go_1.18.10/src/net/textproto/reader.go:57 +0x99
net/textproto.(*Reader).ReadLine(...)
    /opt/go_1.18.10/src/net/textproto/reader.go:38
net/http.readRequest(0xc0004f4420?)
    /opt/go_1.18.10/src/net/http/request.go:1029 +0x79
net/http.(*conn).readRequest(0xc000126000, {0xa468f8, 0xc000297940})
    /opt/go_1.18.10/src/net/http/server.go:988 +0x24a
net/http.(*conn).serve(0xc000126000, {0xa469a0, 0xc0002981b0})
    /opt/go_1.18.10/src/net/http/server.go:1891 +0x32b
created by net/http.(*Server).Serve
    /opt/go_1.18.10/src/net/http/server.go:3071 +0x4db

goroutine 16306 [chan receive]:
github.com/parvit/qpep/server.handleQuicStream.func3()
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:123 +0x36
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:122 +0x9ef

goroutine 16317 [IO wait]:
internal/poll.runtime_pollWait(0x7fa5ec6589a0, 0x72)
    /opt/go_1.18.10/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc0002aa380?, 0xc0005f8000?, 0x0)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc0002aa380, {0xc0005f8000, 0x80000, 0x80000})
    /opt/go_1.18.10/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0002aa380, {0xc0005f8000?, 0x0?, 0x7fa5ec6589c8?})
    /opt/go_1.18.10/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc00081d870, {0xc0005f8000?, 0xc0001acd01?, 0xc00008e000?})
    /opt/go_1.18.10/src/net/net.go:183 +0x45
io.(*LimitedReader).Read(0xc000353008, {0xc0005f8000?, 0xc00008e000?, 0xc0001ace50?})
    /opt/go_1.18.10/src/io/io.go:476 +0x45
io.copyBuffer({0x7fa5ec63c008, 0xc00008e000}, {0xa425c0, 0xc000353008}, {0xc0005f8000, 0x80000, 0x80000})
    /opt/go_1.18.10/src/io/io.go:426 +0x1b2
io.CopyBuffer({0x7fa5ec63c008?, 0xc00008e000?}, {0xa425c0?, 0xc000353008?}, {0xc0005f8000?, 0xc00056a8c0?, 0x610000000097d8d3?})
    /opt/go_1.18.10/src/io/io.go:399 +0x3c
github.com/parvit/qpep/server.handleTcpToQuic({0xa468f8, 0xc00006b200}, 0x43fee5?, 0x0, {0x7fa5ececfab0?, 0xc00008e000}, {0xa48610?, 0xc00081d870}, {0xc000212d70, 0xd})
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:245 +0x396
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:121 +0x9ac

goroutine 16314 [semacquire]:
sync.runtime_Semacquire(0xc0007f4cd0?)
    /opt/go_1.18.10/src/runtime/sema.go:56 +0x25
sync.(*WaitGroup).Wait(0xa46930?)
    /opt/go_1.18.10/src/sync/waitgroup.go:136 +0x52
github.com/parvit/qpep/server.handleQuicStream({0x7fa5ececfab0?, 0xc00008e000})
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:128 +0x9fc
github.com/parvit/qpep/server.listenQuicConn.func2()
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:53 +0x79
created by github.com/parvit/qpep/server.listenQuicConn
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:51 +0x4e

goroutine 16423 [semacquire]:
sync.runtime_Semacquire(0xc000699a80?)
    /opt/go_1.18.10/src/runtime/sema.go:56 +0x25
sync.(*WaitGroup).Wait(0xa46930?)
    /opt/go_1.18.10/src/sync/waitgroup.go:136 +0x52
github.com/parvit/qpep/server.handleQuicStream({0x7fa5ececfab0?, 0xc000000780})
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:128 +0x9fc
github.com/parvit/qpep/server.listenQuicConn.func2()
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:53 +0x79
created by github.com/parvit/qpep/server.listenQuicConn
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:51 +0x4e

goroutine 16437 [runnable]:
github.com/parvit/qpep/server.handleQuicStream.func5()
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:121
runtime.goexit()
    /opt/go_1.18.10/src/runtime/asm_amd64.s:1571 +0x1
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:121 +0x9ac

goroutine 16354 [semacquire]:
sync.runtime_Semacquire(0xc0000f74a0?)
    /opt/go_1.18.10/src/runtime/sema.go:56 +0x25
sync.(*WaitGroup).Wait(0xa46930?)
    /opt/go_1.18.10/src/sync/waitgroup.go:136 +0x52
github.com/parvit/qpep/server.handleQuicStream({0x7fa5ececfab0?, 0xc0000001e0})
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:128 +0x9fc
github.com/parvit/qpep/server.listenQuicConn.func2()
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:53 +0x79
created by github.com/parvit/qpep/server.listenQuicConn
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:51 +0x4e

goroutine 16288 [select]:
github.com/Project-Faster/quic-go.(*receiveStream).readImpl(0xc0003354a0, {0xc0009ec000, 0x8000, 0x8000})
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/receive_stream.go:155 +0x74d
github.com/Project-Faster/quic-go.(*receiveStream).Read(0xc0003354a0, {0xc0009ec000, 0x8000, 0x8000})
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/receive_stream.go:90 +0xdd
io.(*LimitedReader).Read(0xc00029e720, {0xc0009ec000?, 0xc0009ea130?, 0xc000047c00?})
    /opt/go_1.18.10/src/io/io.go:476 +0x45
io.copyBuffer({0xa43460, 0xc0009ea130}, {0xa425c0, 0xc00029e720}, {0x0, 0x0, 0x0})
    /opt/go_1.18.10/src/io/io.go:426 +0x1b2
io.Copy(...)
    /opt/go_1.18.10/src/io/io.go:385
net.genericReadFrom({0xa427a0?, 0xc000010cf8?}, {0xa425c0, 0xc00029e720})
    /opt/go_1.18.10/src/net/net.go:662 +0x6a
net.(*TCPConn).readFrom(0xc000010cf8, {0xa425c0, 0xc00029e720})
    /opt/go_1.18.10/src/net/tcpsock_posix.go:54 +0x78
net.(*TCPConn).ReadFrom(0xc000010cf8, {0xa425c0?, 0xc00029e720?})
    /opt/go_1.18.10/src/net/tcpsock.go:130 +0x36
io.copyBuffer({0xa427a0, 0xc000010cf8}, {0xa425c0, 0xc00029e720}, {0xc003380000, 0x80000, 0x80000})
    /opt/go_1.18.10/src/io/io.go:412 +0x14b
io.CopyBuffer({0xa427a0?, 0xc000010cf8?}, {0xa425c0?, 0xc00029e720?}, {0xc003380000?, 0x1?, 0xc00ded0900?})
    /opt/go_1.18.10/src/io/io.go:399 +0x3c
github.com/parvit/qpep/server.handleQuicToTcp({0xa468f8, 0xc0007e5d40}, 0x43fee5?, 0x0, {0xa48610?, 0xc000010cf8}, {0x7fa5ececfab0?, 0xc0003354a0}, {0xc000028ac8, 0x13}, ...)
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:186 +0x3d6
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:120 +0x89c

goroutine 16391 [chan receive]:
github.com/parvit/qpep/server.handleQuicStream.func3()
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:123 +0x36
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:122 +0x9ef

goroutine 16321 [chan receive]:
github.com/parvit/qpep/server.handleQuicStream.func3()
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:123 +0x36
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:122 +0x9ef

goroutine 16269 [semacquire]:
sync.runtime_Semacquire(0xc0009ea120?)
    /opt/go_1.18.10/src/runtime/sema.go:56 +0x25
sync.(*WaitGroup).Wait(0xa46930?)
    /opt/go_1.18.10/src/sync/waitgroup.go:136 +0x52
github.com/parvit/qpep/server.handleQuicStream({0x7fa5ececfab0?, 0xc0003354a0})
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:128 +0x9fc
github.com/parvit/qpep/server.listenQuicConn.func2()
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:53 +0x79
created by github.com/parvit/qpep/server.listenQuicConn
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:51 +0x4e

goroutine 16438 [chan receive]:
github.com/parvit/qpep/server.handleQuicStream.func3()
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:123 +0x36
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:122 +0x9ef

goroutine 16359 [semacquire]:
sync.runtime_Semacquire(0xc00084d7f0?)
    /opt/go_1.18.10/src/runtime/sema.go:56 +0x25
sync.(*WaitGroup).Wait(0xa46930?)
    /opt/go_1.18.10/src/sync/waitgroup.go:136 +0x52
github.com/parvit/qpep/server.handleQuicStream({0x7fa5ececfab0?, 0xc00008e1e0})
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:128 +0x9fc
github.com/parvit/qpep/server.listenQuicConn.func2()
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:53 +0x79
created by github.com/parvit/qpep/server.listenQuicConn
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:51 +0x4e

goroutine 16387 [semacquire]:
sync.runtime_Semacquire(0xc0003acd70?)
    /opt/go_1.18.10/src/runtime/sema.go:56 +0x25
sync.(*WaitGroup).Wait(0xa46930?)
    /opt/go_1.18.10/src/sync/waitgroup.go:136 +0x52
github.com/parvit/qpep/server.handleQuicStream({0x7fa5ececfab0?, 0xc000334000})
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:128 +0x9fc
github.com/parvit/qpep/server.listenQuicConn.func2()
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:53 +0x79
created by github.com/parvit/qpep/server.listenQuicConn
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:51 +0x4e

goroutine 16376 [IO wait]:
internal/poll.runtime_pollWait(0x7fa5ec63ae28, 0x72)
    /opt/go_1.18.10/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc0002aa400?, 0xc00031c000?, 0x0)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc0002aa400, {0xc00031c000, 0x1000, 0x1000})
    /opt/go_1.18.10/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0002aa400, {0xc00031c000?, 0xc00027e420?, 0x47049e?})
    /opt/go_1.18.10/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc00009f948, {0xc00031c000?, 0x72320c?, 0xc000566940?})
    /opt/go_1.18.10/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc0004c9710, {0xc00031c000, 0x1000, 0x1000})
    /opt/go_1.18.10/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc00044c6c0)
    /opt/go_1.18.10/src/bufio/bufio.go:106 +0x103
bufio.(*Reader).ReadSlice(0xc00044c6c0, 0x0?)
    /opt/go_1.18.10/src/bufio/bufio.go:371 +0x2f
bufio.(*Reader).ReadLine(0xc00044c6c0)
    /opt/go_1.18.10/src/bufio/bufio.go:400 +0x27
net/textproto.(*Reader).readLineSlice(0xc0004c9740)
    /opt/go_1.18.10/src/net/textproto/reader.go:57 +0x99
net/textproto.(*Reader).ReadLine(...)
    /opt/go_1.18.10/src/net/textproto/reader.go:38
net/http.readRequest(0xc00009f948?)
    /opt/go_1.18.10/src/net/http/request.go:1029 +0x79
net/http.(*conn).readRequest(0xc000256000, {0xa468f8, 0xc0008db300})
    /opt/go_1.18.10/src/net/http/server.go:988 +0x24a
net/http.(*conn).serve(0xc000256000, {0xa469a0, 0xc0002981b0})
    /opt/go_1.18.10/src/net/http/server.go:1891 +0x32b
created by net/http.(*Server).Serve
    /opt/go_1.18.10/src/net/http/server.go:3071 +0x4db

goroutine 16327 [chan receive]:
github.com/parvit/qpep/server.handleQuicStream.func3()
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:123 +0x36
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:122 +0x9ef

goroutine 16361 [select]:
github.com/Project-Faster/quic-go.(*receiveStream).readImpl(0xc00008e1e0, {0xc00044e000, 0x8000, 0x8000})
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/receive_stream.go:155 +0x74d
github.com/Project-Faster/quic-go.(*receiveStream).Read(0xc00008e1e0, {0xc00044e000, 0x8000, 0x8000})
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/receive_stream.go:90 +0xdd
io.(*LimitedReader).Read(0xc000182888, {0xc00044e000?, 0xc0002ef720?, 0xc00018c400?})
    /opt/go_1.18.10/src/io/io.go:476 +0x45
io.copyBuffer({0xa43460, 0xc0002ef720}, {0xa425c0, 0xc000182888}, {0x0, 0x0, 0x0})
    /opt/go_1.18.10/src/io/io.go:426 +0x1b2
io.Copy(...)
    /opt/go_1.18.10/src/io/io.go:385
net.genericReadFrom({0xa427a0?, 0xc0004f5e78?}, {0xa425c0, 0xc000182888})
    /opt/go_1.18.10/src/net/net.go:662 +0x6a
net.(*TCPConn).readFrom(0xc0004f5e78, {0xa425c0, 0xc000182888})
    /opt/go_1.18.10/src/net/tcpsock_posix.go:54 +0x78
net.(*TCPConn).ReadFrom(0xc0004f5e78, {0xa425c0?, 0xc000182888?})
    /opt/go_1.18.10/src/net/tcpsock.go:130 +0x36
io.copyBuffer({0xa427a0, 0xc0004f5e78}, {0xa425c0, 0xc000182888}, {0xc000a42000, 0x80000, 0x80000})
    /opt/go_1.18.10/src/io/io.go:412 +0x14b
io.CopyBuffer({0xa427a0?, 0xc0004f5e78?}, {0xa425c0?, 0xc000182888?}, {0xc000a42000?, 0x0?, 0xc0003edb00?})
    /opt/go_1.18.10/src/io/io.go:399 +0x3c
github.com/parvit/qpep/server.handleQuicToTcp({0xa468f8, 0xc0008457c0}, 0x43fee5?, 0x0, {0xa48610?, 0xc0004f5e78}, {0x7fa5ececfab0?, 0xc00008e1e0}, {0xc00032c120, 0x13}, ...)
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:186 +0x3d6
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:120 +0x89c

goroutine 16401 [IO wait]:
internal/poll.runtime_pollWait(0x7fa5ec6224e8, 0x72)
    /opt/go_1.18.10/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc000324400?, 0xc000d0e000?, 0x0)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc000324400, {0xc000d0e000, 0x7fdcc, 0x80000})
    /opt/go_1.18.10/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000324400, {0xc000d0e000?, 0x0?, 0x850260?})
    /opt/go_1.18.10/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc0004816e8, {0xc000d0e000?, 0xc000200d01?, 0xc0003341e0?})
    /opt/go_1.18.10/src/net/net.go:183 +0x45
io.(*LimitedReader).Read(0xc00029ef48, {0xc000d0e000?, 0x234?, 0x80000?})
    /opt/go_1.18.10/src/io/io.go:476 +0x45
io.copyBuffer({0x7fa5ec63c008, 0xc0003341e0}, {0xa425c0, 0xc00029ef48}, {0xc000d0e000, 0x80000, 0x80000})
    /opt/go_1.18.10/src/io/io.go:426 +0x1b2
io.CopyBuffer({0x7fa5ec63c008?, 0xc0003341e0?}, {0xa425c0?, 0xc00029ef48?}, {0xc000d0e000?, 0x3?, 0xc00c571f84?})
    /opt/go_1.18.10/src/io/io.go:399 +0x3c
github.com/parvit/qpep/server.handleTcpToQuic({0xa468f8, 0xc0004a9bc0}, 0x43fee5?, 0x0, {0x7fa5ececfab0?, 0xc0003341e0}, {0xa48610?, 0xc0004816e8}, {0xc0004bcec0, 0xd})
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:245 +0x396
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:121 +0x9ac

goroutine 16319 [select]:
github.com/Project-Faster/quic-go.(*receiveStream).readImpl(0xc0000001e0, {0xc000242000, 0x8000, 0x8000})
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/receive_stream.go:155 +0x74d
github.com/Project-Faster/quic-go.(*receiveStream).Read(0xc0000001e0, {0xc000242000, 0x8000, 0x8000})
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/receive_stream.go:90 +0xdd
io.(*LimitedReader).Read(0xc0001c8918, {0xc000242000?, 0xc00022bdb0?, 0xc000046800?})
    /opt/go_1.18.10/src/io/io.go:476 +0x45
io.copyBuffer({0xa43460, 0xc00022bdb0}, {0xa425c0, 0xc0001c8918}, {0x0, 0x0, 0x0})
    /opt/go_1.18.10/src/io/io.go:426 +0x1b2
io.Copy(...)
    /opt/go_1.18.10/src/io/io.go:385
net.genericReadFrom({0xa427a0?, 0xc00009e9e8?}, {0xa425c0, 0xc0001c8918})
    /opt/go_1.18.10/src/net/net.go:662 +0x6a
net.(*TCPConn).readFrom(0xc00009e9e8, {0xa425c0, 0xc0001c8918})
    /opt/go_1.18.10/src/net/tcpsock_posix.go:54 +0x78
net.(*TCPConn).ReadFrom(0xc00009e9e8, {0xa425c0?, 0xc0001c8918?})
    /opt/go_1.18.10/src/net/tcpsock.go:130 +0x36
io.copyBuffer({0xa427a0, 0xc00009e9e8}, {0xa425c0, 0xc0001c8918}, {0xc000714000, 0x80000, 0x80000})
    /opt/go_1.18.10/src/io/io.go:412 +0x14b
io.CopyBuffer({0xa427a0?, 0xc00009e9e8?}, {0xa425c0?, 0xc0001c8918?}, {0xc000714000?, 0x1?, 0xc00c9d4120?})
    /opt/go_1.18.10/src/io/io.go:399 +0x3c
github.com/parvit/qpep/server.handleQuicToTcp({0xa468f8, 0xc0007e5340}, 0x43fee5?, 0x0, {0xa48610?, 0xc00009e9e8}, {0x7fa5ececfab0?, 0xc0000001e0}, {0xc0002b2168, 0x13}, ...)
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:186 +0x3d6
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:120 +0x89c

goroutine 16404 [IO wait]:
internal/poll.runtime_pollWait(0x7fa5ecee8330, 0x72)
    /opt/go_1.18.10/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc0000b8480?, 0xc0000f0000?, 0x0)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc0000b8480, {0xc0000f0000, 0x1000, 0x1000})
    /opt/go_1.18.10/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc0000b8480, {0xc0000f0000?, 0xc00027e9a0?, 0x47049e?})
    /opt/go_1.18.10/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc0005440d8, {0xc0000f0000?, 0x72320c?, 0xc0006b6640?})
    /opt/go_1.18.10/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc000539620, {0xc0000f0000, 0x1000, 0x1000})
    /opt/go_1.18.10/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc000b8c600)
    /opt/go_1.18.10/src/bufio/bufio.go:106 +0x103
bufio.(*Reader).ReadSlice(0xc000b8c600, 0x0?)
    /opt/go_1.18.10/src/bufio/bufio.go:371 +0x2f
bufio.(*Reader).ReadLine(0xc000b8c600)
    /opt/go_1.18.10/src/bufio/bufio.go:400 +0x27
net/textproto.(*Reader).readLineSlice(0xc000539650)
    /opt/go_1.18.10/src/net/textproto/reader.go:57 +0x99
net/textproto.(*Reader).ReadLine(...)
    /opt/go_1.18.10/src/net/textproto/reader.go:38
net/http.readRequest(0xc0005440d8?)
    /opt/go_1.18.10/src/net/http/request.go:1029 +0x79
net/http.(*conn).readRequest(0xc00027a000, {0xa468f8, 0xc000550200})
    /opt/go_1.18.10/src/net/http/server.go:988 +0x24a
net/http.(*conn).serve(0xc00027a000, {0xa469a0, 0xc0002981b0})
    /opt/go_1.18.10/src/net/http/server.go:1891 +0x32b
created by net/http.(*Server).Serve
    /opt/go_1.18.10/src/net/http/server.go:3071 +0x4db

goroutine 16316 [select]:
github.com/Project-Faster/quic-go.(*receiveStream).readImpl(0xc00008e000, {0xc0000bc000, 0x8000, 0x8000})
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/receive_stream.go:155 +0x74d
github.com/Project-Faster/quic-go.(*receiveStream).Read(0xc00008e000, {0xc0000bc000, 0x8000, 0x8000})
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/receive_stream.go:90 +0xdd
io.(*LimitedReader).Read(0xc0003525e8, {0xc0000bc000?, 0xc0007f4ce0?, 0xc000047c00?})
    /opt/go_1.18.10/src/io/io.go:476 +0x45
io.copyBuffer({0xa43460, 0xc0007f4ce0}, {0xa425c0, 0xc0003525e8}, {0x0, 0x0, 0x0})
    /opt/go_1.18.10/src/io/io.go:426 +0x1b2
io.Copy(...)
    /opt/go_1.18.10/src/io/io.go:385
net.genericReadFrom({0xa427a0?, 0xc00081d870?}, {0xa425c0, 0xc0003525e8})
    /opt/go_1.18.10/src/net/net.go:662 +0x6a
net.(*TCPConn).readFrom(0xc00081d870, {0xa425c0, 0xc0003525e8})
    /opt/go_1.18.10/src/net/tcpsock_posix.go:54 +0x78
net.(*TCPConn).ReadFrom(0xc00081d870, {0xa425c0?, 0xc0003525e8?})
    /opt/go_1.18.10/src/net/tcpsock.go:130 +0x36
io.copyBuffer({0xa427a0, 0xc00081d870}, {0xa425c0, 0xc0003525e8}, {0xc000578000, 0x80000, 0x80000})
    /opt/go_1.18.10/src/io/io.go:412 +0x14b
io.CopyBuffer({0xa427a0?, 0xc00081d870?}, {0xa425c0?, 0xc0003525e8?}, {0xc000578000?, 0x0?, 0xc0005056e0?})
    /opt/go_1.18.10/src/io/io.go:399 +0x3c
github.com/parvit/qpep/server.handleQuicToTcp({0xa468f8, 0xc00006b200}, 0x43fee5?, 0x0, {0xa48610?, 0xc00081d870}, {0x7fa5ececfab0?, 0xc00008e000}, {0xc0002b2108, 0x13}, ...)
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:186 +0x3d6
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:120 +0x89c

goroutine 16390 [IO wait]:
internal/poll.runtime_pollWait(0x7fa5ec652940, 0x72)
    /opt/go_1.18.10/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc000324300?, 0xc000c0e000?, 0x0)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc000324300, {0xc000c0e000, 0x80000, 0x80000})
    /opt/go_1.18.10/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000324300, {0xc000c0e000?, 0x0?, 0x7fa5ec652968?})
    /opt/go_1.18.10/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc000229fc8, {0xc000c0e000?, 0xc000393d01?, 0xc000334000?})
    /opt/go_1.18.10/src/net/net.go:183 +0x45
io.(*LimitedReader).Read(0xc000353098, {0xc000c0e000?, 0xc000334000?, 0xc000393e50?})
    /opt/go_1.18.10/src/io/io.go:476 +0x45
io.copyBuffer({0x7fa5ec63c008, 0xc000334000}, {0xa425c0, 0xc000353098}, {0xc000c0e000, 0x80000, 0x80000})
    /opt/go_1.18.10/src/io/io.go:426 +0x1b2
io.CopyBuffer({0x7fa5ec63c008?, 0xc000334000?}, {0xa425c0?, 0xc000353098?}, {0xc000c0e000?, 0xc0002384c0?, 0x610000000097d8d3?})
    /opt/go_1.18.10/src/io/io.go:399 +0x3c
github.com/parvit/qpep/server.handleTcpToQuic({0xa468f8, 0xc0003a4c80}, 0x43fee5?, 0x0, {0x7fa5ececfab0?, 0xc000334000}, {0xa48610?, 0xc000229fc8}, {0xc0003a3610, 0xd})
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:245 +0x396
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:121 +0x9ac

goroutine 16289 [select]:
github.com/Project-Faster/quic-go.(*sendStream).Write(0xc000335568, {0xc003400000, 0x80000, 0x80000})
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/send_stream.go:173 +0xa05
io.copyBuffer({0x7fa5ec63c008, 0xc0003354a0}, {0xa425c0, 0xc00029ef00}, {0xc003400000, 0x80000, 0x80000})
    /opt/go_1.18.10/src/io/io.go:428 +0x204
io.CopyBuffer({0x7fa5ec63c008?, 0xc0003354a0?}, {0xa425c0?, 0xc00029ef00?}, {0xc003400000?, 0xc0007e72e0?, 0x2a0000000097d8ac?})
    /opt/go_1.18.10/src/io/io.go:399 +0x3c
github.com/parvit/qpep/server.handleTcpToQuic({0xa468f8, 0xc0007e5d40}, 0x43fee5?, 0x0, {0x7fa5ececfab0?, 0xc0003354a0}, {0xa48610?, 0xc000010cf8}, {0xc0007fb4b0, 0xd})
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:245 +0x396
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:121 +0x9ac

goroutine 16450 [chan receive]:
github.com/parvit/qpep/server.handleQuicStream.func3()
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:123 +0x36
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:122 +0x9ef

goroutine 16406 [runnable]:
github.com/Project-Faster/quic-go.(*receiveStream).readImpl(0xc000000960, {0xc0000d8000, 0x8000, 0x8000})
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/receive_stream.go:155 +0x74d
github.com/Project-Faster/quic-go.(*receiveStream).Read(0xc000000960, {0xc0000d8000, 0x8000, 0x8000})
    /root/go/pkg/mod/github.com/!project-!faster/quic-go@v0.0.0-20230209052722-fd67b0616c6d/receive_stream.go:90 +0xdd
io.(*LimitedReader).Read(0xc000182c30, {0xc0000d8000?, 0xc000556440?, 0xc000080800?})
    /opt/go_1.18.10/src/io/io.go:476 +0x45
io.copyBuffer({0xa43460, 0xc000556440}, {0xa425c0, 0xc000182c30}, {0x0, 0x0, 0x0})
    /opt/go_1.18.10/src/io/io.go:426 +0x1b2
io.Copy(...)
    /opt/go_1.18.10/src/io/io.go:385
net.genericReadFrom({0xa427a0?, 0xc000544298?}, {0xa425c0, 0xc000182c30})
    /opt/go_1.18.10/src/net/net.go:662 +0x6a
net.(*TCPConn).readFrom(0xc000544298, {0xa425c0, 0xc000182c30})
    /opt/go_1.18.10/src/net/tcpsock_posix.go:54 +0x78
net.(*TCPConn).ReadFrom(0xc000544298, {0xa425c0?, 0xc000182c30?})
    /opt/go_1.18.10/src/net/tcpsock.go:130 +0x36
io.copyBuffer({0xa427a0, 0xc000544298}, {0xa425c0, 0xc000182c30}, {0xc000d8e000, 0x80000, 0x80000})
    /opt/go_1.18.10/src/io/io.go:412 +0x14b
io.CopyBuffer({0xa427a0?, 0xc000544298?}, {0xa425c0?, 0xc000182c30?}, {0xc000d8e000?, 0x1?, 0xc00130a9c0?})
    /opt/go_1.18.10/src/io/io.go:399 +0x3c
github.com/parvit/qpep/server.handleQuicToTcp({0xa468f8, 0xc000550580}, 0x43fee5?, 0x0, {0xa48610?, 0xc000544298}, {0x7fa5ececfab0?, 0xc000000960}, {0xc000028558, 0x13}, ...)
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:186 +0x3d6
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:120 +0x89c

goroutine 16320 [IO wait]:
internal/poll.runtime_pollWait(0x7fa5ec651e00, 0x72)
    /opt/go_1.18.10/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc000118600?, 0xc0008e8000?, 0x0)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc000118600, {0xc0008e8000, 0x80000, 0x80000})
    /opt/go_1.18.10/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000118600, {0xc0008e8000?, 0x0?, 0xc00defd860?})
    /opt/go_1.18.10/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc00009e9e8, {0xc0008e8000?, 0xc000394d01?, 0xc0000001e0?})
    /opt/go_1.18.10/src/net/net.go:183 +0x45
io.(*LimitedReader).Read(0xc000182a08, {0xc0008e8000?, 0xc0000001e0?, 0xc000394e50?})
    /opt/go_1.18.10/src/io/io.go:476 +0x45
io.copyBuffer({0x7fa5ec63c008, 0xc0000001e0}, {0xa425c0, 0xc000182a08}, {0xc0008e8000, 0x80000, 0x80000})
    /opt/go_1.18.10/src/io/io.go:426 +0x1b2
io.CopyBuffer({0x7fa5ec63c008?, 0xc0000001e0?}, {0xa425c0?, 0xc000182a08?}, {0xc0008e8000?, 0x0?, 0x4548cd?})
    /opt/go_1.18.10/src/io/io.go:399 +0x3c
github.com/parvit/qpep/server.handleTcpToQuic({0xa468f8, 0xc0007e5340}, 0x43fee5?, 0x0, {0x7fa5ececfab0?, 0xc0000001e0}, {0xa48610?, 0xc00009e9e8}, {0xc0000ebd20, 0xd})
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:245 +0x396
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:121 +0x9ac

goroutine 16326 [IO wait]:
internal/poll.runtime_pollWait(0x7fa5ec658a90, 0x72)
    /opt/go_1.18.10/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc000119100?, 0xc003500000?, 0x0)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc000119100, {0xc003500000, 0x80000, 0x80000})
    /opt/go_1.18.10/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000119100, {0xc003500000?, 0x0?, 0x7fa5ec658ab8?})
    /opt/go_1.18.10/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc000287040, {0xc003500000?, 0xc000433d01?, 0xc00008ef00?})
    /opt/go_1.18.10/src/net/net.go:183 +0x45
io.(*LimitedReader).Read(0xc0001c8ed0, {0xc003500000?, 0xc00008ef00?, 0xc000433e50?})
    /opt/go_1.18.10/src/io/io.go:476 +0x45
io.copyBuffer({0x7fa5ec63c008, 0xc00008ef00}, {0xa425c0, 0xc0001c8ed0}, {0xc003500000, 0x80000, 0x80000})
    /opt/go_1.18.10/src/io/io.go:426 +0x1b2
io.CopyBuffer({0x7fa5ec63c008?, 0xc00008ef00?}, {0xa425c0?, 0xc0001c8ed0?}, {0xc003500000?, 0xc0006800c0?, 0x2a0000000097d8ac?})
    /opt/go_1.18.10/src/io/io.go:399 +0x3c
github.com/parvit/qpep/server.handleTcpToQuic({0xa468f8, 0xc00089d3c0}, 0x43fee5?, 0x0, {0x7fa5ececfab0?, 0xc00008ef00}, {0xa48610?, 0xc000287040}, {0xc00089f180, 0xd})
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:245 +0x396
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:121 +0x9ac

goroutine 16318 [chan receive]:
github.com/parvit/qpep/server.handleQuicStream.func3()
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:123 +0x36
created by github.com/parvit/qpep/server.handleQuicStream
    /mnt/dev/src/github.com/parvit/qpep-faster/server/server_network.go:122 +0x9ef

goroutine 16366 [IO wait]:
internal/poll.runtime_pollWait(0x7fa5ecee8600, 0x72)
    /opt/go_1.18.10/src/runtime/netpoll.go:302 +0x89
internal/poll.(*pollDesc).wait(0xc000118800?, 0xc0001b0000?, 0x0)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:83 +0x32
internal/poll.(*pollDesc).waitRead(...)
    /opt/go_1.18.10/src/internal/poll/fd_poll_runtime.go:88
internal/poll.(*FD).Read(0xc000118800, {0xc0001b0000, 0x1000, 0x1000})
    /opt/go_1.18.10/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000118800, {0xc0001b0000?, 0xc000446840?, 0x47049e?})
    /opt/go_1.18.10/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc00085d4e8, {0xc0001b0000?, 0x72320c?, 0xc0000b6480?})
    /opt/go_1.18.10/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc000460060, {0xc0001b0000, 0x1000, 0x1000})
    /opt/go_1.18.10/src/net/http/server.go:780 +0x16d
bufio.(*Reader).fill(0xc0008e61e0)
    /opt/go_1.18.10/src/bufio/bufio.go:106 +0x103
bufio.(*Reader).ReadSlice(0xc0008e61e0, 0x0?)
    /opt/go_1.18.10/src/bufio/bufio.go:371 +0x2f
bufio.(*Reader).ReadLine(0xc0008e61e0)
    /opt/go_1.18.10/src/bufio/bufio.go:400 +0x27
net/textproto.(*Reader).readLineSlice(0xc000460090)
    /opt/go_1.18.10/src/net/textproto/reader.go:57 +0x99
net/textproto.(*Reader).ReadLine(...)
    /opt/go_1.18.10/src/net/textproto/reader.go:38
net/http.readRequest(0xc00085d4e8?)
    /opt/go_1.18.10/src/net/http/request.go:1029 +0x79
net/http.(*conn).readRequest(0xc000126e60, {0xa468f8, 0xc00087a540})
    /opt/go_1.18.10/src/net/http/server.go:988 +0x24a
net/http.(*conn).serve(0xc000126e60, {0xa469a0, 0xc0002981b0})
    /opt/go_1.18.10/src/net/http/server.go:1891 +0x32b
created by net/http.(*Server).Serve
    /opt/go_1.18.10/src/net/http/server.go:3071 +0x4db
parvit commented 1 year ago

@mfoxworthy Added new test StatisticsSuite.TestParallelExecution and with current code on main branch it does not fail.

However removing the fix of commit e823e10c the error presents itself right away with:

fatal error: concurrent map writes

goroutine 26 [running]:
runtime.throw({0x140da2f?, 0xc0002a9ee0?})
    C:/home/dev/go_1.18.6/src/runtime/panic.go:992 +0x76 fp=0xc0002a9e88 sp=0xc0002a9e58 pc=0xef9716
runtime.mapassign_faststr(0x13912e0?, 0x140592d?, {0xc000306fd0, 0xe})
    C:/home/dev/go_1.18.6/src/runtime/map_faststr.go:212 +0x39c fp=0xc0002a9ef0 sp=0xc0002a9e88 pc=0xed3ffc
github.com/parvit/qpep/api.(*statistics).SetMappedAddress(0x1c40100, {0x1406b81, 0x9}, {0x1406b8a, 0x9})
    C:/home/dev/src/github.com/parvit/qpep-faster/api/statistics.go:292 +0x237 fp=0xc0002a9f80 sp=0xc0002a9ef0 pc=0x13110d7
github.com/parvit/qpep/api.(*StatisticsSuite).TestParallelExecution.func6()
    C:/home/dev/src/github.com/parvit/qpep-faster/api/statistics_test.go:389 +0x7e fp=0xc0002a9fe0 sp=0xc0002a9f80 pc=0x131d4de
runtime.goexit()
    C:/home/dev/go_1.18.6/src/runtime/asm_amd64.s:1571 +0x1 fp=0xc0002a9fe8 sp=0xc0002a9fe0 pc=0xf2a1c1
created by github.com/parvit/qpep/api.(*StatisticsSuite).TestParallelExecution
    C:/home/dev/src/github.com/parvit/qpep-faster/api/statistics_test.go:386 +0x1c5

What i suppose is that the version you tested for the server was taken before this fix, we should align all the versions and test again.