Browse Source

Merge pull request #854 from fintura/memory-leak

Fix memory leak. See #723 and thx to @rahar
greenkeeper-update-all
Ruben Bridgewater 9 years ago
parent
commit
a6357d672a
  1. 38
      index.js
  2. 4
      test/commands/multi.spec.js

38
index.js

@ -394,9 +394,25 @@ RedisClient.prototype.send_offline_queue = function () {
} }
}; };
RedisClient.prototype.connection_gone = function (why) { var retry_connection = function (self) {
var self = this; debug("Retrying connection...");
self.emit("reconnecting", {
delay: self.retry_delay,
attempt: self.attempts
});
self.retry_totaltime += self.retry_delay;
self.attempts += 1;
self.retry_delay = Math.round(self.retry_delay * self.retry_backoff);
self.stream = net.createConnection(self.connectionOption);
self.install_stream_listeners();
self.retry_timer = null;
};
RedisClient.prototype.connection_gone = function (why) {
// If a retry is already in progress, just let that happen // If a retry is already in progress, just let that happen
if (this.retry_timer) { if (this.retry_timer) {
return; return;
@ -452,23 +468,7 @@ RedisClient.prototype.connection_gone = function (why) {
debug("Retry connection in " + this.retry_delay + " ms"); debug("Retry connection in " + this.retry_delay + " ms");
this.retry_timer = setTimeout(function () { this.retry_timer = setTimeout(retry_connection, this.retry_delay, this);
debug("Retrying connection...");
self.emit("reconnecting", {
delay: self.retry_delay,
attempt: self.attempts
});
self.retry_totaltime += self.retry_delay;
self.attempts += 1;
self.retry_delay = Math.round(self.retry_delay * self.retry_backoff);
self.stream = net.createConnection(self.connectionOption);
self.install_stream_listeners();
self.retry_timer = null;
}, this.retry_delay);
}; };
RedisClient.prototype.on_data = function (data) { RedisClient.prototype.on_data = function (data) {

4
test/commands/multi.spec.js

@ -250,11 +250,11 @@ describe("The 'multi' method", function () {
}); });
it('reports EXECABORT exceptions when they occur (while queueing)', function (done) { it('reports EXECABORT exceptions when they occur (while queueing)', function (done) {
client.multi().config("bar").set("foo").exec(function (err, reply) { client.multi().config("bar").set("foo").set("bar").exec(function (err, reply) {
assert.equal(err.code, "EXECABORT"); assert.equal(err.code, "EXECABORT");
assert.equal(reply, undefined, "The reply should have been discarded"); assert.equal(reply, undefined, "The reply should have been discarded");
assert(err.message.match(/^EXECABORT/), "Error message should begin with EXECABORT"); assert(err.message.match(/^EXECABORT/), "Error message should begin with EXECABORT");
assert.equal(err.errors.length, 1, "err.errors should have 1 items"); assert.equal(err.errors.length, 2, "err.errors should have 2 items");
assert.strictEqual(err.errors[0].command_used, 'SET'); assert.strictEqual(err.errors[0].command_used, 'SET');
assert.strictEqual(err.errors[0].position, 1); assert.strictEqual(err.errors[0].position, 1);
assert(/^ERR/.test(err.errors[0].message), "Actuall error message should begin with ERR"); assert(/^ERR/.test(err.errors[0].message), "Actuall error message should begin with ERR");

Loading…
Cancel
Save