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 {
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 ]
Original file line number Diff line number Diff 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
871903function expectNoPendingAcquisitionRequests ( pool ) {
You can’t perform that action at this time.
0 commit comments