1
0
Fork 0
mirror of https://github.com/openstf/stf synced 2025-10-04 10:19:30 +02:00

Hopefully get rid of FrameProducer._stop() timeouts. Doesn't reproduce locally.

This commit is contained in:
Simo Kinnunen 2015-07-15 14:13:31 +09:00
parent cfc84a0e42
commit dc07777829
3 changed files with 52 additions and 42 deletions

View file

@ -325,39 +325,32 @@ module.exports = syrup.serial()
var pid = this.banner ? this.banner.pid : -1 var pid = this.banner ? this.banner.pid : -1
function waitForEnd() {
var endListener
return new Promise(function(resolve/*, reject*/) {
output.expectEnd().on('end', endListener = function() {
resolve(true)
})
})
.finally(function() {
output.removeListener('end', endListener)
})
}
function kill(signal) { function kill(signal) {
if (pid <= 0) { if (pid <= 0) {
return Promise.reject(new Error('Minicap service pid is unknown')) return Promise.reject(new Error('Minicap service pid is unknown'))
} }
log.info('Sending SIGTERM to minicap') var signum = {
'SIGTERM': -15
, 'SIGKILL': -9
}[signal]
log.info('Sending %s to minicap', signal)
return Promise.all([ return Promise.all([
waitForEnd() output.waitForEnd()
, adb.shell(options.serial, ['kill', signal, pid]) , adb.shell(options.serial, ['kill', signum, pid])
.then(adbkit.util.readAll) .then(adbkit.util.readAll)
.timeout(2000)
.return(true) .return(true)
]) ])
.timeout(2000)
} }
function kindKill() { function kindKill() {
return kill('-15') return kill('SIGTERM')
} }
function forceKill() { function forceKill() {
return kill('-9') return kill('SIGKILL')
} }
function forceEnd() { function forceEnd() {

View file

@ -337,39 +337,32 @@ module.exports = syrup.serial()
var pid = this.banner ? this.banner.pid : -1 var pid = this.banner ? this.banner.pid : -1
function waitForEnd() {
var endListener
return new Promise(function(resolve/*, reject*/) {
output.expectEnd().on('end', endListener = function() {
resolve(true)
})
})
.finally(function() {
output.removeListener('end', endListener)
})
}
function kill(signal) { function kill(signal) {
if (pid <= 0) { if (pid <= 0) {
return Promise.reject(new Error('Minitouch service pid is unknown')) return Promise.reject(new Error('Minitouch service pid is unknown'))
} }
log.info('Sending SIGTERM to minitouch') var signum = {
'SIGTERM': -15
, 'SIGKILL': -9
}[signal]
log.info('Sending %s to minitouch', signal)
return Promise.all([ return Promise.all([
waitForEnd() output.waitForEnd()
, adb.shell(options.serial, ['kill', signal, pid]) , adb.shell(options.serial, ['kill', signum, pid])
.then(adbkit.util.readAll) .then(adbkit.util.readAll)
.timeout(2000)
.return(true) .return(true)
]) ])
.timeout(2000)
} }
function kindKill() { function kindKill() {
return kill('-15') return kill('SIGTERM')
} }
function forceKill() { function forceKill() {
return kill('-9') return kill('SIGKILL')
} }
function forceEnd() { function forceEnd() {

View file

@ -1,5 +1,6 @@
var util = require('util') var util = require('util')
var Promise = require('bluebird')
var EventEmitter = require('eventemitter3').EventEmitter var EventEmitter = require('eventemitter3').EventEmitter
function RiskyStream(stream) { function RiskyStream(stream) {
@ -34,4 +35,27 @@ RiskyStream.prototype.expectEnd = function() {
return this return this
} }
RiskyStream.prototype.waitForEnd = function() {
var stream = this.stream
, endListener
this.expectEnd()
return new Promise(function(resolve/*, reject*/) {
if (stream.ended) {
return resolve(true)
}
stream.on('end', endListener = function() {
resolve(true)
})
// Make sure we actually have a chance to get the 'end' event.
stream.resume()
})
.finally(function() {
stream.removeListener('end', endListener)
})
}
module.exports = RiskyStream module.exports = RiskyStream