mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-04-25 02:22:14 +00:00
fix: increase the maxlisteners for timeout controllers (#1065)
We use timeout controllers to ensure we're not dialling peers forever but we can end up registering lots of listeners for the `abort` event when peers have a lot of addresses. In node this means we see an unhelpful `MaxListenersExceededWarning` in the console warning of a potential memory leak. Increase the max number of listeners on the signal to silence the warning.
This commit is contained in:
parent
a642ad2a03
commit
09a0f940df
@ -9,7 +9,8 @@ const { Multiaddr } = require('multiaddr')
|
||||
const { TimeoutController } = require('timeout-abort-controller')
|
||||
const { AbortError } = require('abortable-iterator')
|
||||
const { anySignal } = require('any-signal')
|
||||
|
||||
// @ts-expect-error setMaxListeners is missing from the types
|
||||
const { setMaxListeners } = require('events')
|
||||
const DialRequest = require('./dial-request')
|
||||
const { publicAddressesFirst } = require('libp2p-utils/src/address-sort')
|
||||
const getPeer = require('../get-peer')
|
||||
@ -253,6 +254,10 @@ class Dialer {
|
||||
|
||||
// Combine the timeout signal and options.signal, if provided
|
||||
const timeoutController = new TimeoutController(this.timeout)
|
||||
// this controller will potentially be used while dialing lots of
|
||||
// peers so prevent MaxListenersExceededWarning appearing in the console
|
||||
setMaxListeners && setMaxListeners(Infinity, timeoutController.signal)
|
||||
|
||||
const signals = [timeoutController.signal]
|
||||
options.signal && signals.push(options.signal)
|
||||
const signal = anySignal(signals)
|
||||
|
@ -24,6 +24,8 @@ const {
|
||||
// @ts-ignore module with no types
|
||||
} = require('set-delayed-interval')
|
||||
const { DHTPeerRouting } = require('./dht/dht-peer-routing')
|
||||
// @ts-expect-error setMaxListeners is missing from the types
|
||||
const { setMaxListeners } = require('events')
|
||||
|
||||
/**
|
||||
* @typedef {import('peer-id')} PeerId
|
||||
@ -149,7 +151,12 @@ class PeerRouting {
|
||||
}
|
||||
|
||||
if (options.timeout) {
|
||||
options.signal = new TimeoutController(options.timeout).signal
|
||||
const controller = new TimeoutController(options.timeout)
|
||||
// this controller will potentially be used while dialing lots of
|
||||
// peers so prevent MaxListenersExceededWarning appearing in the console
|
||||
setMaxListeners && setMaxListeners(Infinity, controller.signal)
|
||||
|
||||
options.signal = controller.signal
|
||||
}
|
||||
|
||||
yield * pipe(
|
||||
|
Loading…
x
Reference in New Issue
Block a user