kv-memory: fix crash in regular cleanup

Fix bug in "_setupRegularCleanup()" where the interval callback
was trying to access an object that has been garbage-collected
in the meantime.
This commit is contained in:
Miroslav Bajtoš 2016-08-09 15:35:23 +02:00
parent 8e81185375
commit 4978cd8089
2 changed files with 10 additions and 9 deletions

View File

@ -31,8 +31,15 @@ KeyValueMemoryConnector.prototype._setupRegularCleanup = function() {
// key expiration too, the scheduled cleanup is merely a performance // key expiration too, the scheduled cleanup is merely a performance
// optimization. // optimization.
var self = this; var self = this;
this._cleanupTimer = setInterval( var timer = this._cleanupTimer = setInterval(
function() { self._removeExpiredItems(); }, function() {
if (self && self._removeExpiredItems) {
self._removeExpiredItems();
} else {
// The datasource/connector was destroyed - cancel the timer
clearInterval(timer);
}
},
1000); 1000);
this._cleanupTimer.unref(); this._cleanupTimer.unref();
}; };

View File

@ -2,15 +2,9 @@ var kvMemory = require('../lib/connectors/kv-memory');
var DataSource = require('..').DataSource; var DataSource = require('..').DataSource;
describe('KeyValue-Memory connector', function() { describe('KeyValue-Memory connector', function() {
var lastDataSource;
var dataSourceFactory = function() { var dataSourceFactory = function() {
lastDataSource = new DataSource({ connector: kvMemory }); return new DataSource({ connector: kvMemory });
return lastDataSource;
}; };
afterEach(function disconnectKVMemoryConnector() {
if (lastDataSource) return lastDataSource.disconnect();
});
require('./kvao.suite')(dataSourceFactory); require('./kvao.suite')(dataSourceFactory);
}); });