File tree 2 files changed +12
-4
lines changed 2 files changed +12
-4
lines changed Original file line number Diff line number Diff line change @@ -5980,8 +5980,11 @@ type countCloseListener struct {
5980
5980
}
5981
5981
5982
5982
func (p * countCloseListener ) Close () error {
5983
- atomic .AddInt32 (& p .closes , 1 )
5984
- return nil
5983
+ var err error
5984
+ if n := atomic .AddInt32 (& p .closes , 1 ); n == 1 && p .Listener != nil {
5985
+ err = p .Listener .Close ()
5986
+ }
5987
+ return err
5985
5988
}
5986
5989
5987
5990
// Issue 24803: don't call Listener.Close on Server.Shutdown.
Original file line number Diff line number Diff line change @@ -2680,7 +2680,7 @@ func (srv *Server) Shutdown(ctx context.Context) error {
2680
2680
ticker := time .NewTicker (shutdownPollInterval )
2681
2681
defer ticker .Stop ()
2682
2682
for {
2683
- if srv .closeIdleConns () {
2683
+ if srv .closeIdleConns () && srv . numListeners () == 0 {
2684
2684
return lnerr
2685
2685
}
2686
2686
select {
@@ -2702,6 +2702,12 @@ func (srv *Server) RegisterOnShutdown(f func()) {
2702
2702
srv .mu .Unlock ()
2703
2703
}
2704
2704
2705
+ func (s * Server ) numListeners () int {
2706
+ s .mu .Lock ()
2707
+ defer s .mu .Unlock ()
2708
+ return len (s .listeners )
2709
+ }
2710
+
2705
2711
// closeIdleConns closes all idle connections and reports whether the
2706
2712
// server is quiescent.
2707
2713
func (s * Server ) closeIdleConns () bool {
@@ -2734,7 +2740,6 @@ func (s *Server) closeListenersLocked() error {
2734
2740
if cerr := (* ln ).Close (); cerr != nil && err == nil {
2735
2741
err = cerr
2736
2742
}
2737
- delete (s .listeners , ln )
2738
2743
}
2739
2744
return err
2740
2745
}
You can’t perform that action at this time.
0 commit comments