Skip to content

Commit a328c65

Browse files
authored
Merge 254ea5d into f1e85dc
2 parents f1e85dc + 254ea5d commit a328c65

File tree

2 files changed

+43
-16
lines changed

2 files changed

+43
-16
lines changed

.npmignore

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33

44
tmp
55
test
6-
tasks
6+
#tasks
77
/tools/
88
docs
9-
client
9+
#client
1010
logo
1111
integration-tests
1212

@@ -16,8 +16,8 @@ Gruntfile.coffee
1616
credentials
1717
Karma.sublime-*
1818

19-
static/karma.src.js
20-
static/karma.wrapper
19+
#static/karma.src.js
20+
#static/karma.wrapper
2121
test-results.xml
2222
thesis.pdf
2323
mocha-watch.sh

lib/server.js

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,32 @@ class Server extends KarmaEventEmitter {
147147
return this._fileList ? this._fileList.changeFile(path) : Promise.resolve()
148148
}
149149

150+
emitExitAsync (code) {
151+
const name = 'exit'
152+
let pending = this.listeners(name).length
153+
const deferred = helper.defer()
154+
155+
function resolve () {
156+
deferred.resolve(code)
157+
}
158+
159+
this.emit(name, (newCode) => {
160+
if (newCode && typeof newCode === 'number') {
161+
// Only update code if it is given and not zero
162+
code = newCode
163+
}
164+
if (!--pending) {
165+
resolve()
166+
}
167+
})
168+
169+
if (!pending) {
170+
resolve()
171+
}
172+
173+
return deferred.promise
174+
}
175+
150176
async _start (config, launcher, preprocess, fileList, capturedBrowsers, executor, done) {
151177
if (config.detached) {
152178
this._detach(config, done)
@@ -356,21 +382,22 @@ class Server extends KarmaEventEmitter {
356382
}
357383
})
358384

359-
let removeAllListenersDone = false
360-
const removeAllListeners = () => {
361-
if (removeAllListenersDone) {
362-
return
363-
}
364-
removeAllListenersDone = true
365-
webServer.removeAllListeners()
366-
processWrapper.removeAllListeners()
367-
done(code || 0)
368-
}
369-
370-
return this.emitAsync('exit').then(() => {
385+
return this.emitExitAsync(code).then((code) => {
371386
return new Promise((resolve, reject) => {
372387
socketServer.sockets.removeAllListeners()
373388
socketServer.close()
389+
390+
let removeAllListenersDone = false
391+
const removeAllListeners = () => {
392+
if (removeAllListenersDone) {
393+
return
394+
}
395+
removeAllListenersDone = true
396+
webServer.removeAllListeners()
397+
processWrapper.removeAllListeners()
398+
done(code || 0)
399+
}
400+
374401
const closeTimeout = setTimeout(removeAllListeners, webServerCloseTimeout)
375402

376403
webServer.close(() => {

0 commit comments

Comments
 (0)