diff --git a/NEWS.md b/NEWS.md index 779030e..35f7ffd 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,7 @@ # pool (development version) +* `Pool$release()` now forwards `error_call` correctly when reporting invalid objects. + # pool 1.0.5 * Added compatibility for dbplyr's upcoming dialect-based dispatch. diff --git a/R/pool.R b/R/pool.R index 5a0efbe..8cfe806 100644 --- a/R/pool.R +++ b/R/pool.R @@ -78,7 +78,7 @@ Pool <- R6::R6Class( ## (sets up task to destroy the object if the number of ## total objects exceeds the minimum) release = function(object, error_call = caller_env()) { - pool_metadata <- pool_metadata(object, error_call = error_call()) + pool_metadata <- pool_metadata(object, error_call = error_call) if (pool_metadata$state == "free") { abort( "This object was already returned to the pool.", diff --git a/tests/testthat/_snaps/pool.md b/tests/testthat/_snaps/pool.md index a23eda3..119a3e9 100644 --- a/tests/testthat/_snaps/pool.md +++ b/tests/testthat/_snaps/pool.md @@ -25,6 +25,14 @@ Error in `poolClose()`: ! The pool has been closed. +# releasing a non-pooled object gives an informative error + + Code + release(1) + Condition + Error in `release()`: + ! `object` is not an pooled object. + # max size is enforced Code diff --git a/tests/testthat/test-pool.R b/tests/testthat/test-pool.R index 5ecf4b3..f9e0aff 100644 --- a/tests/testthat/test-pool.R +++ b/tests/testthat/test-pool.R @@ -37,6 +37,14 @@ test_that("can fetch and release", { checkCounts(pool, free = 1, taken = 0) }) +test_that("releasing a non-pooled object gives an informative error", { + pool <- poolCreate(function() 1) + defer(poolClose(pool)) + + release <- function(object) pool$release(object) + expect_snapshot(release(1), error = TRUE) +}) + test_that("max size is enforced", { pool <- poolCreate(MockPooledObj$new, maxSize = 2) defer(poolClose(pool))