Skip to content

Commit

Permalink
config: use Fx hook to close the quicreuse connection manager
Browse files Browse the repository at this point in the history
  • Loading branch information
marten-seemann committed Feb 25, 2023
1 parent 72c5f11 commit fc5436b
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 3 deletions.
17 changes: 15 additions & 2 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ import (

ma "github.com/multiformats/go-multiaddr"
madns "github.com/multiformats/go-multiaddr-dns"
"github.com/quic-go/quic-go"
"go.uber.org/fx"
"go.uber.org/fx/fxevent"
)
Expand Down Expand Up @@ -247,7 +248,16 @@ func (cfg *Config) addTransports() ([]fx.Option, error) {
if cfg.QUICReuse != nil {
fxopts = append(fxopts, cfg.QUICReuse...)
} else {
fxopts = append(fxopts, fx.Provide(quicreuse.NewConnManager)) // TODO: close the ConnManager when shutting down the node
fxopts = append(fxopts,
fx.Provide(func(key quic.StatelessResetKey, _ *swarm.Swarm, lifecycle fx.Lifecycle) (*quicreuse.ConnManager, error) {
cm, err := quicreuse.NewConnManager(key)
if err != nil {
return nil, err
}
lifecycle.Append(fx.StopHook(cm.Close))
return cm, nil
}),
)
}

fxopts = append(fxopts, fx.Invoke(
Expand Down Expand Up @@ -320,7 +330,10 @@ func (cfg *Config) NewNode() (host.Host, error) {
lifecycle.Append(fx.StopHook(sw.Close))
return sw, nil
}),
fx.Decorate(func(sw *swarm.Swarm, lifecycle fx.Lifecycle) *swarm.Swarm {
// Make sure the swarm constructor depends on the quicreuse.ConnManager.
// That way, the ConnManager will be started before the swarm, and more importantly,
// the swarm will be stopped before the ConnManager.
fx.Decorate(func(sw *swarm.Swarm, _ *quicreuse.ConnManager, lifecycle fx.Lifecycle) *swarm.Swarm {
lifecycle.Append(fx.Hook{
OnStart: func(context.Context) error {
// TODO: This method succeeds if listening on one address succeeds. We
Expand Down
2 changes: 1 addition & 1 deletion p2p/transport/quic/virtuallistener.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ func (r *acceptLoopRunner) RmAcceptForVersion(v quic.VersionNumber) {

ch, ok := r.muxer[v]
if !ok {
panic("expected chan in accept muxer")
return
}
ch <- acceptVal{err: errors.New("listener Accept closed")}
delete(r.muxer, v)
Expand Down

0 comments on commit fc5436b

Please sign in to comment.