You've already forked node-redis
mirror of
https://github.com/redis/node-redis.git
synced 2025-08-07 13:22:56 +03:00
Fix memory leak. See #723 and thx to @rahar
This commit is contained in:
38
index.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) {
|
||||||
|
@@ -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");
|
||||||
|
Reference in New Issue
Block a user