Skip to content

Commit e10c182

Browse files
committed
xvfb: clear close timeout
1 parent cbe94c3 commit e10c182

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed

src/commands/xvfb.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ export default class Xvfb {
9797
const error = stderr.match(/\(EE\) (?!\(EE\))(.+?)$/m)[1] || stderr
9898
if (stderr.includes('already active for display')) {
9999
if (!quiet) {
100-
console.warn(`Xvfb: ${error}`) // eslint-disable-line no-console
100+
console.warn(`Xvfb: ${error}`, Xvfb.process.pid) // eslint-disable-line no-console
101101
}
102102
return
103103
}
@@ -110,7 +110,7 @@ export default class Xvfb {
110110
}
111111

112112
static stop() {
113-
if (!Xvfb.isRunning()) {
113+
if (!Xvfb.process || Xvfb.closed) {
114114
return
115115
}
116116

@@ -119,17 +119,19 @@ export default class Xvfb {
119119
// enable timers if they where faked by a test framework
120120
enableTimers()
121121

122+
let closeTimeout
122123
const waitTimeout = new Promise((resolve) => {
123-
const timeout = setTimeout(() => {
124+
closeTimeout = setTimeout(() => {
124125
consola.warn(`Timeout: Xvfb did not exit after 3s`)
125126
resolve()
126127
}, 3000)
127-
timeout.unref()
128+
closeTimeout.unref()
128129
})
129130

130131
const waitClosed = new Promise((resolve) => {
131132
const closeInterval = setInterval(() => {
132133
if (Xvfb.closed) {
134+
clearTimeout(closeTimeout)
133135
clearInterval(closeInterval)
134136
resolve()
135137
}

test/unit/command.xvfb.test.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ Fatal server error:
207207
})
208208

209209
test('should wait on stop for closed to be true', async () => {
210+
const spy = jest.spyOn(console, 'warn').mockImplementation(() => {})
210211
jest.useFakeTimers()
211212

212213
Xvfb.process = true
@@ -217,6 +218,9 @@ Fatal server error:
217218
jest.advanceTimersByTime(100)
218219

219220
await expect(stopPromise).resolves.toBeUndefined()
221+
222+
jest.advanceTimersByTime(3100)
223+
expect(spy).not.toHaveBeenCalled()
220224
})
221225

222226
test('should timeout on stop', async () => {
@@ -227,9 +231,6 @@ Fatal server error:
227231
Xvfb.closed = false
228232

229233
const stopPromise = Xvfb.stop()
230-
Xvfb.closed = true
231-
jest.advanceTimersByTime(100)
232-
await expect(stopPromise).not.resolves
233234

234235
jest.advanceTimersByTime(3100)
235236
await expect(stopPromise).resolves.toBeUndefined()

0 commit comments

Comments
 (0)