File tree Expand file tree Collapse file tree 2 files changed +39
-1
lines changed Expand file tree Collapse file tree 2 files changed +39
-1
lines changed Original file line number Diff line number Diff line change @@ -210,7 +210,10 @@ class Pool {
210
210
if ( this . _installIdleObserver ) {
211
211
this . _installIdleObserver ( resource , {
212
212
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
+ }
214
217
this . _destroy ( resource )
215
218
}
216
219
} )
@@ -235,6 +238,9 @@ class Pool {
235
238
const pool = this . _pools [ key ] || [ ]
236
239
while ( pool . length ) {
237
240
const resource = pool . pop ( )
241
+ if ( this . _removeIdleObserver ) {
242
+ this . _removeIdleObserver ( resource )
243
+ }
238
244
this . _destroy ( resource )
239
245
}
240
246
delete this . _pools [ key ]
Original file line number Diff line number Diff line change @@ -866,6 +866,38 @@ describe('Pool', () => {
866
866
} )
867
867
} )
868
868
} )
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
+ } )
869
901
} )
870
902
871
903
function expectNoPendingAcquisitionRequests ( pool ) {
You can’t perform that action at this time.
0 commit comments