forked from quic-go/quic-go
make sure that the server's run loop returned when closing
This commit is contained in:
@@ -79,6 +79,7 @@ type baseServer struct {
|
|||||||
serverError error
|
serverError error
|
||||||
errorChan chan struct{}
|
errorChan chan struct{}
|
||||||
closed bool
|
closed bool
|
||||||
|
running chan struct{} // closed as soon as run() returns
|
||||||
|
|
||||||
sessionQueue chan quicSession
|
sessionQueue chan quicSession
|
||||||
sessionQueueLen int32 // to be used as an atomic
|
sessionQueueLen int32 // to be used as an atomic
|
||||||
@@ -179,6 +180,7 @@ func listen(conn net.PacketConn, tlsConf *tls.Config, config *Config, acceptEarl
|
|||||||
zeroRTTQueue: newZeroRTTQueue(),
|
zeroRTTQueue: newZeroRTTQueue(),
|
||||||
sessionQueue: make(chan quicSession),
|
sessionQueue: make(chan quicSession),
|
||||||
errorChan: make(chan struct{}),
|
errorChan: make(chan struct{}),
|
||||||
|
running: make(chan struct{}),
|
||||||
receivedPackets: make(chan *receivedPacket, protocol.MaxServerUnprocessedPackets),
|
receivedPackets: make(chan *receivedPacket, protocol.MaxServerUnprocessedPackets),
|
||||||
newSession: newSession,
|
newSession: newSession,
|
||||||
logger: utils.DefaultLogger.WithPrefix("server"),
|
logger: utils.DefaultLogger.WithPrefix("server"),
|
||||||
@@ -191,6 +193,7 @@ func listen(conn net.PacketConn, tlsConf *tls.Config, config *Config, acceptEarl
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *baseServer) run() {
|
func (s *baseServer) run() {
|
||||||
|
defer close(s.running)
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-s.errorChan:
|
case <-s.errorChan:
|
||||||
@@ -265,6 +268,7 @@ func (s *baseServer) Close() error {
|
|||||||
}
|
}
|
||||||
s.closed = true
|
s.closed = true
|
||||||
close(s.errorChan)
|
close(s.errorChan)
|
||||||
|
<-s.running
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user