Skip to content

Commit 0d66ce9

Browse files
committed
Fix an issue in error handling when pool is purged
1 parent 8ac9bbb commit 0d66ce9

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

src/v1/internal/pool.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,10 @@ class Pool {
210210
if (this._installIdleObserver) {
211211
this._installIdleObserver(resource, {
212212
onError: () => {
213-
this._pools[key] = this._pools[key].filter(r => r !== resource)
213+
const pool = this._pools[key]
214+
if (pool) {
215+
this._pools[key] = pool.filter(r => r !== resource)
216+
}
214217
this._destroy(resource)
215218
}
216219
})
@@ -235,6 +238,9 @@ class Pool {
235238
const pool = this._pools[key] || []
236239
while (pool.length) {
237240
const resource = pool.pop()
241+
if (this._removeIdleObserver) {
242+
this._removeIdleObserver(resource)
243+
}
238244
this._destroy(resource)
239245
}
240246
delete this._pools[key]

test/internal/pool.test.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -866,6 +866,38 @@ describe('Pool', () => {
866866
})
867867
})
868868
})
869+
870+
it('should clean-up idle observer on purge', done => {
871+
const address = ServerAddress.fromUrl('bolt://localhost:7687')
872+
let resourceCount = 0
873+
874+
const pool = new Pool({
875+
create: (server, release) =>
876+
Promise.resolve(new Resource(server, resourceCount++, release)),
877+
destroy: resource => {},
878+
validate: resource => true,
879+
installIdleObserver: (resource, observer) => {
880+
resource['observer'] = observer
881+
},
882+
removeIdleObserver: resource => {
883+
delete resource['observer']
884+
}
885+
})
886+
887+
pool.acquire(address).then(resource1 => {
888+
pool.acquire(address).then(resource2 => {
889+
resource1.close()
890+
resource2.close()
891+
892+
pool.purge(address)
893+
894+
expect(resource1['observer']).toBeFalsy()
895+
expect(resource2['observer']).toBeFalsy()
896+
897+
done()
898+
})
899+
})
900+
})
869901
})
870902

871903
function expectNoPendingAcquisitionRequests (pool) {

0 commit comments

Comments
 (0)