diff options
author | Christopher Baines <mail@cbaines.net> | 2025-02-03 12:16:16 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2025-02-03 12:16:16 +0100 |
commit | bddc6c04adf0aad5db6b5a28b54a93608043ffc2 (patch) | |
tree | 98de55e1eba41b6703ce36ee07610153b5db5b01 | |
parent | a2ab77053619e9edb551d673970b8b7bd248cd76 (diff) | |
download | knots-bddc6c04adf0aad5db6b5a28b54a93608043ffc2.tar knots-bddc6c04adf0aad5db6b5a28b54a93608043ffc2.tar.gz |
Fix idle resource removal in the resource pool
-rw-r--r-- | knots/resource-pool.scm | 10 | ||||
-rw-r--r-- | tests/resource-pool.scm | 21 |
2 files changed, 23 insertions, 8 deletions
diff --git a/knots/resource-pool.scm b/knots/resource-pool.scm index d08749b..de03f50 100644 --- a/knots/resource-pool.scm +++ b/knots/resource-pool.scm @@ -391,16 +391,10 @@ (spawn-fiber-to-destroy-resource resource)) resources-to-destroy)) - (loop (lset-difference eq? resources resources-to-destroy) + (loop resources (lset-difference eq? available resources-to-destroy) waiters - (filter-map - (lambda (resource last-used) - (if (memq resource resources-to-destroy) - #f - last-used)) - resources - resources-last-used)))) + resources-last-used))) (('destroy reply) (if (null? resources) diff --git a/tests/resource-pool.scm b/tests/resource-pool.scm index 1d998ef..50dadbd 100644 --- a/tests/resource-pool.scm +++ b/tests/resource-pool.scm @@ -74,6 +74,27 @@ (run-fibers-for-tests (lambda () + (let ((resource-pool (make-resource-pool + new-number + 2 + #:idle-seconds 0.5 + #:destructor + (lambda (res) + #t)))) + (fibers-for-each + (lambda _ + (with-resource-from-pool resource-pool + res + res)) + (iota 20)) + + (let loop ((stats (resource-pool-stats resource-pool))) + (unless (= 0 (assq-ref stats 'resources)) + (sleep 0.1) + (loop (resource-pool-stats resource-pool))))))) + +(run-fibers-for-tests + (lambda () (let* ((counter 0) (resource-pool (make-resource-pool (lambda () |