Skip to content

Commit 09e3343

Browse files
committed
Prevent enqueuing sequences after fatal error
fixes #400
1 parent 057425e commit 09e3343

File tree

2 files changed

+68
-1
lines changed

2 files changed

+68
-1
lines changed

lib/protocol/Protocol.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,10 @@ Protocol.prototype._validateEnqueue = function(sequence) {
143143
var prefixBefore = prefix + ' before ';
144144
var prefixAfter = prefix + ' after ';
145145

146-
if (this._quitSequence) {
146+
if (this._fatalError) {
147+
err = new Error(prefixAfter + 'fatal error.');
148+
err.code = 'PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR';
149+
} else if (this._quitSequence) {
147150
err = new Error(prefixAfter + 'invoking quit.');
148151
err.code = 'PROTOCOL_ENQUEUE_AFTER_QUIT';
149152
} else if (this._destroyed) {
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
var common = require('../../common');
2+
var connection = common.createConnection({port: common.fakeServerPort});
3+
var assert = require('assert');
4+
5+
var server = common.createFakeServer();
6+
7+
var connectErr;
8+
var finalErr;
9+
var queryErr1;
10+
var queryErr2;
11+
var queryErr3;
12+
var timeout;
13+
server.listen(common.fakeServerPort, function(err) {
14+
if (err) throw err;
15+
var waitCount = 4;
16+
17+
connection.connect(function(err) {
18+
connectErr = err;
19+
if (!--waitCount) end();
20+
});
21+
22+
connection.query('SELECT 1', function(err) {
23+
queryErr1 = err;
24+
connection.query('SELECT 1', function(err) {
25+
finalErr = err;
26+
if (!--waitCount) end();
27+
});
28+
});
29+
30+
process.nextTick(function() {
31+
connection.query('SELECT 1', function(err) {
32+
queryErr2 = err;
33+
if (!--waitCount) end();
34+
});
35+
});
36+
37+
setTimeout(function() {
38+
connection.query('SELECT 1', function(err) {
39+
queryErr3 = err;
40+
if (!--waitCount) end();
41+
});
42+
}, 200);
43+
44+
timeout = setTimeout(end, 2000);
45+
});
46+
47+
function end() {
48+
if (timeout) clearTimeout(timeout);
49+
server.destroy();
50+
}
51+
52+
server.on('connection', function(incomingConnection) {
53+
var errno = 1130; // ER_HOST_NOT_PRIVILEGED
54+
incomingConnection.deny('You suck.', errno);
55+
});
56+
57+
process.on('exit', function() {
58+
assert.ok(connectErr);
59+
assert.ok(queryErr1);
60+
assert.ok(queryErr2);
61+
assert.ok(queryErr3);
62+
assert.ok(finalErr);
63+
assert.equal(finalErr.code, 'PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR');
64+
});

0 commit comments

Comments
 (0)