Skip to content

Commit 55265b8

Browse files
coreyfarrelldougwilson
authored andcommitted
Support Node.js 10.x
fixes #2003 fixes #2024 closes #2026 fixes #2034
1 parent 2913d47 commit 55265b8

File tree

6 files changed

+44
-15
lines changed

6 files changed

+44
-15
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ node_js:
1414
- "7.10"
1515
- "8.11"
1616
- "9.8"
17+
- "10.3"
1718
env:
1819
global:
1920
# Necessary to build Node.js 0.6 on Travis CI images

Changes.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ you spot any mistakes.
1010
* Add new error codes up to MySQL 5.7.21
1111
* Include connection ID in debug output
1212
* Support Node.js 9.x
13+
* Support Node.js 10.x #2003 #2024 #2026 #2034
1314
* Update Amazon RDS SSL certificates
1415
* Update `bignumber.js` to 4.1.0
1516
* Update `readable-stream` to 2.3.6

appveyor.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ environment:
1818
- nodejs_version: "7.10"
1919
- nodejs_version: "8.11"
2020
- nodejs_version: "9.8"
21+
- nodejs_version: "10.3"
2122

2223
services:
2324
- mysql

lib/protocol/Protocol.js

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
var Parser = require('./Parser');
22
var Sequences = require('./sequences');
33
var Packets = require('./packets');
4-
var Timers = require('timers');
54
var Stream = require('stream').Stream;
65
var Util = require('util');
76
var PacketWriter = require('./PacketWriter');
@@ -154,7 +153,7 @@ Protocol.prototype._enqueue = function(sequence) {
154153
self._delegateError(err, sequence);
155154
})
156155
.on('packet', function(packet) {
157-
Timers.active(sequence);
156+
sequence._timer.active();
158157
self._emitPacket(packet);
159158
})
160159
.on('end', function() {
@@ -170,7 +169,7 @@ Protocol.prototype._enqueue = function(sequence) {
170169
self._delegateError(err, sequence);
171170
})
172171
.on('start-tls', function() {
173-
Timers.active(sequence);
172+
sequence._timer.active();
174173
self._connection._startTLS(function(err) {
175174
if (err) {
176175
// SSL negotiation error are fatal
@@ -180,7 +179,7 @@ Protocol.prototype._enqueue = function(sequence) {
180179
return;
181180
}
182181

183-
Timers.active(sequence);
182+
sequence._timer.active();
184183
sequence._tlsUpgradeCompleteHandler();
185184
});
186185
});
@@ -265,7 +264,7 @@ Protocol.prototype._parsePacket = function() {
265264
this._handshakeInitializationPacket = packet;
266265
}
267266

268-
Timers.active(sequence);
267+
sequence._timer.active();
269268

270269
if (!sequence[packetName]) {
271270
var err = new Error('Received packet in the wrong sequence.');
@@ -322,7 +321,7 @@ Protocol.prototype._determinePacket = function(sequence) {
322321
};
323322

324323
Protocol.prototype._dequeue = function(sequence) {
325-
Timers.unenroll(sequence);
324+
sequence._timer.stop();
326325

327326
// No point in advancing the queue, we are dead
328327
if (this._fatalError) {
@@ -344,8 +343,7 @@ Protocol.prototype._dequeue = function(sequence) {
344343

345344
Protocol.prototype._startSequence = function(sequence) {
346345
if (sequence._timeout > 0 && isFinite(sequence._timeout)) {
347-
Timers.enroll(sequence, sequence._timeout);
348-
Timers.active(sequence);
346+
sequence._timer.start(sequence._timeout);
349347
}
350348

351349
if (sequence.constructor === Sequences.ChangeUser) {

lib/protocol/Timer.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
var Timers = require('timers');
2+
3+
module.exports = Timer;
4+
function Timer(object) {
5+
this._object = object;
6+
this._timeout = null;
7+
}
8+
9+
Timer.prototype.active = function active() {
10+
if (this._timeout) {
11+
if (this._timeout.refresh) {
12+
this._timeout.refresh();
13+
} else {
14+
Timers.active(this._timeout);
15+
}
16+
}
17+
};
18+
19+
Timer.prototype.start = function start(msecs) {
20+
this.stop();
21+
this._timeout = Timers.setTimeout(this._onTimeout.bind(this), msecs);
22+
};
23+
24+
Timer.prototype.stop = function stop() {
25+
if (this._timeout) {
26+
Timers.clearTimeout(this._timeout);
27+
this._timeout = null;
28+
}
29+
};
30+
31+
Timer.prototype._onTimeout = function _onTimeout() {
32+
return this._object._onTimeout();
33+
};

lib/protocol/sequences/Sequence.js

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ var Util = require('util');
22
var EventEmitter = require('events').EventEmitter;
33
var Packets = require('../packets');
44
var ErrorConstants = require('../constants/errors');
5+
var Timer = require('../Timer');
56

67
// istanbul ignore next: Node.js < 0.10 not covered
78
var listenerCount = EventEmitter.listenerCount
@@ -25,13 +26,7 @@ function Sequence(options, callback) {
2526
this._callSite = null;
2627
this._ended = false;
2728
this._timeout = options.timeout;
28-
29-
// For Timers
30-
this._idleNext = null;
31-
this._idlePrev = null;
32-
this._idleStart = null;
33-
this._idleTimeout = -1;
34-
this._repeat = null;
29+
this._timer = new Timer(this);
3530
}
3631

3732
Sequence.determinePacket = function(byte) {

0 commit comments

Comments
 (0)