undici icon indicating copy to clipboard operation
undici copied to clipboard

redirecting >11 times causes "MaxListenersExceededWarning"

Open KhafraDev opened this issue 2 years ago • 0 comments

Bug Description

Each redirect adds one terminated listener to fetchParams and it's never removed.

Reproducible By

import { once } from 'events'
import { createServer } from 'http'
import { fetch } from 'undici'

let redirects = 0

const server = createServer((req, res) => {
  if (redirects === 15) {
    res.end('Okay goodbye')
    return
  }

  res.writeHead(302, {
    Location: `/${redirects++}`
  })
  res.end()
}).listen(0)

await once(server, 'listening')

const url = `http://localhost:${server.address().port}`

fetch(url, { redirect: 'follow' })

Expected Behavior

Logs & Screenshots

MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 terminated listeners added to [Fetch]. Use emitter.setMaxListeners() to increase limit

Environment

Additional context

KhafraDev avatar Oct 17 '22 15:10 KhafraDev