From 9c123bbfa937413e759916f91cbc62e3966324c5 Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Tue, 25 Nov 2025 14:26:39 +0000 Subject: [PATCH 1/3] Fix listing resource pool resources --- knots/resource-pool.scm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/knots/resource-pool.scm b/knots/resource-pool.scm index f00e05b..2d96ed7 100644 --- a/knots/resource-pool.scm +++ b/knots/resource-pool.scm @@ -391,7 +391,7 @@ (('list-resources reply) (spawn-fiber (lambda () - (put-message reply (list-copy resources)))) + (put-message reply (vector->list resources)))) (loop available waiters)) @@ -967,7 +967,9 @@ (('list-resources reply) (spawn-fiber (lambda () - (put-message reply (list-copy resources)))) + (put-message reply (hash-map->list + (lambda (_ value) value) + resources)))) (loop next-resource-id available From 05f7daf0e9b866dd3f8d997b49c6ae14b30d635c Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Wed, 26 Nov 2025 10:06:09 +0000 Subject: [PATCH 2/3] Add another resource pool test --- tests/resource-pool.scm | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tests/resource-pool.scm b/tests/resource-pool.scm index 2e30cb9..b3a84d7 100644 --- a/tests/resource-pool.scm +++ b/tests/resource-pool.scm @@ -252,4 +252,34 @@ (destroy-resource-pool resource-pool)))) +;; Test allocating resources to waiters and destroying resources +(run-fibers-for-tests + (lambda () + (let ((resource-pool (make-resource-pool + (lambda () + (sleep 1) + 'res) + 2 + #:idle-seconds 1 + #:add-resources-parallelism 10 + #:destructor + (const #t)))) + (fibers-for-each + (lambda _ + (with-resource-from-pool resource-pool + res + res)) + (iota 20)) + + (sleep 2) + + (fibers-for-each + (lambda _ + (with-resource-from-pool resource-pool + res + res)) + (iota 20)) + + (destroy-resource-pool resource-pool)))) + (display "resource-pool test finished successfully\n") From a8e07b738b558d701c6de1f5ee6452ee4095198e Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Wed, 26 Nov 2025 10:06:20 +0000 Subject: [PATCH 3/3] Fix a resource pool bug with idle seconds Actually perform the choice operation. --- knots/resource-pool.scm | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/knots/resource-pool.scm b/knots/resource-pool.scm index 2d96ed7..f957c3d 100644 --- a/knots/resource-pool.scm +++ b/knots/resource-pool.scm @@ -1117,13 +1117,14 @@ (lambda () (let loop () (put-message channel '(check-for-idle-resources)) - (when (choice-operation - (wrap-operation - (sleep-operation idle-seconds) - (const #t)) - (wrap-operation - (wait-operation destroy-condition) - (const #f))) + (when (perform-operation + (choice-operation + (wrap-operation + (sleep-operation idle-seconds) + (const #t)) + (wrap-operation + (wait-operation destroy-condition) + (const #f)))) (loop)))))) (with-exception-handler