aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2025-02-03 12:16:16 +0100
committerChristopher Baines <mail@cbaines.net>2025-02-03 12:16:16 +0100
commitbddc6c04adf0aad5db6b5a28b54a93608043ffc2 (patch)
tree98de55e1eba41b6703ce36ee07610153b5db5b01
parenta2ab77053619e9edb551d673970b8b7bd248cd76 (diff)
downloadknots-bddc6c04adf0aad5db6b5a28b54a93608043ffc2.tar
knots-bddc6c04adf0aad5db6b5a28b54a93608043ffc2.tar.gz
Fix idle resource removal in the resource pool
-rw-r--r--knots/resource-pool.scm10
-rw-r--r--tests/resource-pool.scm21
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 ()