forked from lix-project/lix
Revert "libutil: drop Pool resources on exceptional free"
This reverts commitde2884b82b
. Change-Id:I1fa301149d7c2ed3d266a40c15b2d010e12e44e6
This commit is contained in:
parent
b417838078
commit
7576f0135c
|
@ -1,7 +1,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
///@file
|
///@file
|
||||||
|
|
||||||
#include <exception>
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <limits>
|
#include <limits>
|
||||||
#include <list>
|
#include <list>
|
||||||
|
@ -119,7 +118,7 @@ public:
|
||||||
if (!r) return;
|
if (!r) return;
|
||||||
{
|
{
|
||||||
auto state_(pool.state.lock());
|
auto state_(pool.state.lock());
|
||||||
if (!bad && !std::uncaught_exceptions())
|
if (!bad)
|
||||||
state_->idle.push_back(ref<R>(r));
|
state_->idle.push_back(ref<R>(r));
|
||||||
assert(state_->inUse);
|
assert(state_->inUse);
|
||||||
state_->inUse--;
|
state_->inUse--;
|
||||||
|
@ -135,12 +134,6 @@ public:
|
||||||
|
|
||||||
Handle get()
|
Handle get()
|
||||||
{
|
{
|
||||||
// we do not want to handle the complexity that comes with allocating
|
|
||||||
// resources during stack unwinding. it would be possible to do this,
|
|
||||||
// but doing so requires more per-handle bookkeeping to properly free
|
|
||||||
// resources allocated during unwinding. that effort is not worth it.
|
|
||||||
assert(std::uncaught_exceptions() == 0);
|
|
||||||
|
|
||||||
{
|
{
|
||||||
auto state_(state.lock());
|
auto state_(state.lock());
|
||||||
|
|
||||||
|
|
|
@ -109,19 +109,4 @@ namespace nix {
|
||||||
ASSERT_NE(h->num, counter);
|
ASSERT_NE(h->num, counter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(Pool, throwingOperationDropsResource)
|
|
||||||
{
|
|
||||||
auto createResource = []() { return make_ref<TestResource>(); };
|
|
||||||
|
|
||||||
Pool<TestResource> pool = Pool<TestResource>((size_t)1, createResource);
|
|
||||||
|
|
||||||
ASSERT_THROW({
|
|
||||||
auto _r = pool.get();
|
|
||||||
ASSERT_EQ(pool.count(), 1);
|
|
||||||
throw 1;
|
|
||||||
}, int);
|
|
||||||
|
|
||||||
ASSERT_EQ(pool.count(), 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue