Skip to content

Commit

Permalink
Cleanup abort listener (#42)
Browse files Browse the repository at this point in the history
  • Loading branch information
delvedor authored Feb 21, 2022
1 parent cebfe9f commit 9444e89
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 1 deletion.
13 changes: 12 additions & 1 deletion src/connection/HttpConnection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,11 +113,15 @@ export default class HttpConnection extends BaseConnection {
return reject(err)
}

const abortListener = (): void => {
request.abort()
}

this._openRequests++
if (options.signal != null) {
options.signal.addEventListener(
'abort',
() => request.abort(),
abortListener,
{ once: true }
)
}
Expand Down Expand Up @@ -276,6 +280,13 @@ export default class HttpConnection extends BaseConnection {
request.removeListener('error', onError)
request.removeListener('abort', onAbort)
request.removeListener('socket', onSocket)
if (options.signal != null) {
if ('removeEventListener' in options.signal) {
options.signal.removeEventListener('abort', abortListener)
} else {
options.signal.removeListener('abort', abortListener)
}
}
cleanedListeners = true
}
})
Expand Down
27 changes: 27 additions & 0 deletions test/unit/http-connection.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1172,3 +1172,30 @@ test('as stream', async t => {
server.stop()
})

test('Cleanup abort listener', async t => {
t.plan(2)

const controller = new AbortController()

function handler (req: http.IncomingMessage, res: http.ServerResponse) {
// @ts-expect-error
t.equal(controller.signal.eventEmitter.listeners('abort').length, 1)
res.end('ok')
}

const [{ port }, server] = await buildServer(handler)
const connection = new HttpConnection({
url: new URL(`http://localhost:${port}`)
})

await connection.request({
path: '/hello',
method: 'GET',
}, {
...options,
signal: controller.signal
})
// @ts-expect-error
t.equal(controller.signal.eventEmitter.listeners('abort').length, 0)
server.stop()
})

0 comments on commit 9444e89

Please sign in to comment.