Skip to content

Commit c3f05ef

Browse files
committed
fix(server): Remove Socket.IO listeners
Not removing Socket.IO listeners can cause memory issues in long running processes that spawn many Karma instance. Fixes #2980
1 parent a6577d9 commit c3f05ef

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

lib/server.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,10 @@ Server.prototype._start = function (config, launcher, preprocess, fileList,
425425
}
426426

427427
self.emitAsync('exit').then(function () {
428+
// Remove Socket.IO listeners. `connection` callback closes over `Server`
429+
// instance so it leaks Plugin state e.g. Webpack compilations.
430+
socketServer.sockets.removeAllListeners()
431+
socketServer.close()
428432
// don't wait forever on webServer.close() because
429433
// pending client connections prevent it from closing.
430434
var closeTimeout = setTimeout(removeAllListeners, webServerCloseTimeout)

test/unit/server.spec.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,15 @@ describe('server', () => {
6565
}
6666

6767
mockSocketServer = {
68+
close: () => {},
6869
flashPolicyServer: {
6970
close: () => {}
7071
},
7172
sockets: {
7273
sockets: {},
7374
on: () => {},
74-
emit: () => {}
75+
emit: () => {},
76+
removeAllListeners: () => {}
7577
}
7678
}
7779

0 commit comments

Comments
 (0)