Skip to content

Commit dc519bb

Browse files
authored
Merge pull request #579 from sidorares/fix/pool-release-on-error
Fix/pool release on error
2 parents 73fcf54 + 0db012f commit dc519bb

File tree

4 files changed

+40
-3
lines changed

4 files changed

+40
-3
lines changed

lib/commands/command.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,10 @@ Command.prototype.execute = function(packet, connection) {
2828
var err = packet.asError(connection.clientEncoding);
2929
if (this.onResult) {
3030
this.onResult(err);
31+
this.emit('end');
3132
} else {
3233
this.emit('error', err);
34+
this.emit('end');
3335
}
3436
return true;
3537
}

lib/connection.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -714,6 +714,7 @@ Connection.prototype.execute = function execute(sql, values, cb) {
714714
} else {
715715
executeCommand.emit('error', err);
716716
}
717+
executeCommand.emit('end');
717718
return;
718719
}
719720

lib/pool.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -170,10 +170,9 @@ Pool.prototype.execute = function(sql, values, cb) {
170170
return cb(err);
171171
}
172172

173-
conn.config.namedPlaceholders = useNamedPlaceholders;
174-
return conn.execute(sql, values, function() {
173+
const executeCmd = conn.execute(sql, values, cb);
174+
executeCmd.once('end', function() {
175175
conn.release();
176-
cb.apply(this, arguments);
177176
});
178177
});
179178
};

test/integration/test-pool-release.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
var createPool = require('../common.js').createPool;
2+
var assert = require('assert');
3+
4+
var pool = createPool();
5+
6+
pool.query('test sql', function(err, res, rows) {
7+
pool.query('test sql', [], function(err, res, rows) {
8+
pool.query('test sql', [], function(err, res, rows) {
9+
pool.query('test sql', [], function(err, res, rows) {
10+
pool.query('test sql', function(err, res, rows) {
11+
pool.query('test sql').on('error', function(err) {
12+
pool.query('test sql', function(err, res, rows) {
13+
pool.execute('test sql', function(err, res, rows) {
14+
pool.execute('test sql', function(err, res, rows) {
15+
pool.execute('test sql', [], function(err, res, rows) {
16+
pool.execute('test sql', function(err) {
17+
pool.execute('test sql', function(err, res, rows) {
18+
// TODO change order events are fires so that connection is released before callback
19+
// that way this number will be more deterministic
20+
assert(pool._allConnections.length < 3);
21+
assert(pool._freeConnections.length === 1);
22+
assert(pool._connectionQueue.length === 0);
23+
pool.end();
24+
});
25+
});
26+
});
27+
});
28+
});
29+
});
30+
});
31+
});
32+
});
33+
});
34+
});
35+
});

0 commit comments

Comments
 (0)