generic-pool
Advanced tools
Comparing version 2.2.1 to 2.2.2
@@ -108,2 +108,3 @@ var PriorityQueue = function(size) { | ||
availableObjects = [], | ||
inUseObjects = [], | ||
waitingClients = new PriorityQueue(factory.priorityRange || 1), | ||
@@ -154,2 +155,7 @@ count = 0, | ||
}); | ||
inUseObjects = inUseObjects.filter(function(obj) { | ||
return (obj !== obj); | ||
}); | ||
factory.destroy(obj); | ||
@@ -252,2 +258,3 @@ | ||
availableObjects.shift(); | ||
inUseObjects.push(objWithTimeout.obj); | ||
clientCb = waitingClients.dequeue(); | ||
@@ -285,2 +292,3 @@ return clientCb(err, objWithTimeout.obj); | ||
} else { | ||
inUseObjects.push(obj); | ||
if (clientCb) { | ||
@@ -341,3 +349,3 @@ clientCb(err, obj); | ||
me.release = function (obj) { | ||
// check to see if this object has already been released (i.e., is back in the pool of availableObjects) | ||
// check to see if this object has already been released (i.e., is back in the pool of availableObjects) | ||
if (availableObjects.some(function(objWithTimeout) { return (objWithTimeout.obj === obj); })) { | ||
@@ -347,10 +355,19 @@ log("release called twice for the same resource: " + (new Error().stack), 'error'); | ||
} | ||
// check to see if this object exists in the `in use` list and remove it | ||
var index = inUseObjects.indexOf(obj); | ||
if (index < 0) { | ||
log("attempt to release an invalid resource: " + (new Error().stack), 'error'); | ||
return; | ||
} | ||
//log("return to pool"); | ||
inUseObjects.splice(index, 1); | ||
var objWithTimeout = { obj: obj, timeout: (new Date().getTime() + idleTimeoutMillis) }; | ||
if(returnToHead){ | ||
availableObjects.splice(0, 0, objWithTimeout); | ||
availableObjects.splice(0, 0, objWithTimeout); | ||
} | ||
else{ | ||
availableObjects.push(objWithTimeout); | ||
} | ||
availableObjects.push(objWithTimeout); | ||
} | ||
log("timeout: " + objWithTimeout.timeout, 'verbose'); | ||
@@ -474,2 +491,6 @@ dispense(); | ||
me.inUseObjectsCount = function() { | ||
return inUseObjects.length; | ||
}; | ||
me.waitingClientsCount = function() { | ||
@@ -481,3 +502,3 @@ return waitingClients.size(); | ||
return factory.max; | ||
} | ||
}; | ||
@@ -484,0 +505,0 @@ // create initial resources (if factory.min > 0) |
{ | ||
"name": "generic-pool", | ||
"description": "Generic resource pooling for Node.JS", | ||
"version": "2.2.1", | ||
"version": "2.2.2", | ||
"author": "James Cooper <james@bitmechanic.com>", | ||
@@ -6,0 +6,0 @@ "contributors": [ |
@@ -23,2 +23,5 @@ [![build status](https://secure.travis-ci.org/coopernurse/node-pool.png)](http://travis-ci.org/coopernurse/node-pool) | ||
2.2.2 - December 13 2015 | ||
- Merged #106 - fix condition where non "resource pool" created objects could be returned to the pool. (contributed by @devzer01) | ||
2.2.1 - October 30 2015 | ||
@@ -25,0 +28,0 @@ - Merged #104 - fix #103 - condition where pool can create > specified max number of connections (contributed by @devzer01) |
@@ -616,5 +616,32 @@ var assert = require('assert'); | ||
}); | ||
} | ||
}, | ||
'returns only valid object to the pool': function(beforeExit){ | ||
var pool = poolModule.Pool({ | ||
name: 'test', | ||
create: function(callback) { | ||
process.nextTick(function(){ | ||
callback(null, { id: 'validId' }); | ||
}); | ||
}, | ||
destroy: function(client) {}, | ||
max: 1, | ||
idleTimeoutMillis: 100 | ||
}); | ||
pool.acquire(function(err, obj){ | ||
assert.equal(pool.availableObjectsCount(), 0); | ||
assert.equal(pool.inUseObjectsCount(), 1); | ||
// Invalid release | ||
pool.release({}); | ||
assert.equal(pool.availableObjectsCount(), 0); | ||
assert.equal(pool.inUseObjectsCount(), 1); | ||
// Valid release | ||
pool.release(obj); | ||
assert.equal(pool.availableObjectsCount(), 1); | ||
assert.equal(pool.inUseObjectsCount(), 0); | ||
}); | ||
} | ||
}; |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
54024
1014
365