Browse Source

system: lock reent object in ctor

pull/2575/head
Maxim Prokhorov 1 year ago
parent
commit
9211dcd785
2 changed files with 44 additions and 13 deletions
  1. +8
    -2
      code/espurna/types.h
  2. +36
    -11
      code/test/unit/src/types/types.cpp

+ 8
- 2
code/espurna/types.h View File

@ -193,15 +193,21 @@ struct ReentryLock {
ReentryLock(ReentryLock&&) = default;
ReentryLock& operator=(ReentryLock&&) = delete;
ReentryLock(bool& handle) :
explicit ReentryLock(bool& handle) :
_initialized(!handle),
_handle(handle)
{}
{
lock();
}
~ReentryLock() {
unlock();
}
explicit operator bool() const {
return initialized();
}
bool initialized() const {
return _initialized;
}


+ 36
- 11
code/test/unit/src/types/types.cpp View File

@ -215,6 +215,30 @@ void test_callback_swap() {
TEST_ASSERT_EQUAL(10, output);
}
void test_reentry_helper() {
bool flag { false };
auto one = [&]() {
auto lock = ReentryLock{ flag };
if (!lock) {
return true;
}
return false;
};
auto two = [&]() {
auto lock = ReentryLock{ flag };
if (!lock) {
return false;
}
return one();
};
TEST_ASSERT(two());
}
} // namespace
} // namespace test
} // namespace espurna
@ -223,18 +247,19 @@ int main(int, char**) {
UNITY_BEGIN();
using namespace espurna::test;
RUN_TEST(test_view);
RUN_TEST(test_view_nullptr);
RUN_TEST(test_view_convert);
RUN_TEST(test_view_compare);
RUN_TEST(test_callback_empty);
RUN_TEST(test_callback_simple);
RUN_TEST(test_callback_lambda);
RUN_TEST(test_callback_capture);
RUN_TEST(test_callback_capture_copy);
RUN_TEST(test_callback_capture_move);
RUN_TEST(test_view);
RUN_TEST(test_view_nullptr);
RUN_TEST(test_view_convert);
RUN_TEST(test_view_compare);
RUN_TEST(test_callback_empty);
RUN_TEST(test_callback_simple);
RUN_TEST(test_callback_lambda);
RUN_TEST(test_callback_capture);
RUN_TEST(test_callback_capture_copy);
RUN_TEST(test_callback_capture_move);
RUN_TEST(test_callback_assign);
RUN_TEST(test_callback_swap);
RUN_TEST(test_callback_swap);
RUN_TEST(test_reentry_helper);
return UNITY_END();
}

Loading…
Cancel
Save