diff --git a/src/apps.js b/src/apps.js index e2c3b3080..ef48ddaff 100644 --- a/src/apps.js +++ b/src/apps.js @@ -55,6 +55,7 @@ var addons = require('./addons.js'), docker = require('./docker.js'), fs = require('fs'), manifestFormat = require('cloudron-manifestformat'), + once = require('once'), path = require('path'), paths = require('./paths.js'), safe = require('safetydance'), @@ -667,15 +668,19 @@ function exec(appId, options, callback) { container.resize({ h: options.rows, w: options.columns }, NOOP_CALLBACK); } + var deleteContainer = once(docker.deleteContainer.bind(null, container.id, NOOP_CALLBACK)); + container.wait(function (error) { if (error) debug('Error waiting on container', error); debug('exec: container finished', container.id); - docker.deleteContainer(container.id, NOOP_CALLBACK); + deleteContainer(); }); - return callback(null, stream); + stream.close = deleteContainer; + + callback(null, stream); }); }); }); diff --git a/src/routes/apps.js b/src/routes/apps.js index 23b3c4db2..2931a7e0a 100644 --- a/src/routes/apps.js +++ b/src/routes/apps.js @@ -368,6 +368,8 @@ function exec(req, res, next) { duplexStream.pipe(res.socket); res.socket.pipe(duplexStream); + + res.on('close', duplexStream.close); }); }