diff --git a/src/appdb.js b/src/appdb.js index 1258ef723..d5384d1aa 100644 --- a/src/appdb.js +++ b/src/appdb.js @@ -459,7 +459,7 @@ function setTask(appId, values, callback) { assert.strictEqual(typeof values, 'object'); assert.strictEqual(typeof callback, 'function'); - if (values.installationState === 'pending_repair') { // FIXME + if (values.installationState === 'pending_repair' || values.installationState === 'pending_uninstall') { // FIXME updateWithConstraints(appId, values, 'AND taskId IS NULL AND installationState = "error"', callback); } else { updateWithConstraints(appId, values, 'AND taskId IS NULL AND installationState != "error"', callback); diff --git a/src/apps.js b/src/apps.js index f960eff22..ae0e9685d 100644 --- a/src/apps.js +++ b/src/apps.js @@ -667,7 +667,9 @@ function checkAppState(app, state) { if (app.taskId) return new AppsError(AppsError.BAD_STATE, `Not allowed in this app state : ${app.installationState} / ${app.runState}`); - if (state !== exports.ISTATE_PENDING_REPAIR && app.installationState === exports.ISTATE_ERROR) return new AppsError(AppsError.BAD_STATE, 'Not allowed in error state'); + if (app.installationState === exports.ISTATE_ERROR) { + if (state !== exports.ISTATE_PENDING_REPAIR && state !== exports.ISTATE_PENDING_UNINSTALL) return new AppsError(AppsError.BAD_STATE, 'Not allowed in error state'); + } return null; }