Skip to content

Commit 76e93d7

Browse files
authored
fix(ws): handle removing untracked event listeners (#7419)
1 parent d308b93 commit 76e93d7

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

packages/datadog-instrumentations/src/ws.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ function wrapListener (originalOn) {
9595
function removeListener (originalOff) {
9696
return function (eventName, handler) {
9797
if (eventName === 'message') {
98-
const wrappedHandler = eventHandlerMap.get(handler)
98+
const wrappedHandler = eventHandlerMap.get(handler) || handler
9999
return originalOff.call(this, eventName, wrappedHandler)
100100
}
101101
return originalOff.apply(this, arguments)

packages/datadog-plugin-ws/test/index.spec.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,26 @@ describe('Plugin', () => {
9595
})
9696
})
9797

98+
it('should handle removing a listener that was never added', (done) => {
99+
wsServer.on('connection', (ws) => {
100+
connectionReceived = true
101+
ws.send('test message')
102+
})
103+
104+
const neverAddedHandler = () => {
105+
throw new Error('this should never be called')
106+
}
107+
108+
client.on('message', (msg) => {
109+
assert.strictEqual(msg.toString(), 'test message')
110+
done()
111+
})
112+
113+
assert.doesNotThrow(() => {
114+
client.off('message', neverAddedHandler)
115+
})
116+
})
117+
98118
it('should do automatic instrumentation for server connections', done => {
99119
connectionReceived = false
100120

0 commit comments

Comments
 (0)