• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

jbaldwin / libcoro / 13092367596

01 Feb 2025 08:59PM UTC coverage: 85.865%. First build
13092367596

Pull #295

github

web-flow
Merge 966eb9e4a into cd4405c90
Pull Request #295: Add executor.schedule(coro::task<void>) -> bool

23 of 25 new or added lines in 7 files covered. (92.0%)

1385 of 1613 relevant lines covered (85.86%)

4327654.25 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

60.53
/src/detail/task_self_deleting.cpp
1
#include "coro/detail/task_self_deleting.hpp"
2

3
#include <utility>
4

5
namespace coro::detail
6
{
7

8
promise_self_deleting::promise_self_deleting()
400,306✔
9
{
10
}
400,306✔
11

12
promise_self_deleting::~promise_self_deleting()
400,306✔
13
{
14
}
400,306✔
15

16
promise_self_deleting::promise_self_deleting(promise_self_deleting&& other)
×
NEW
17
    : m_executor_size(std::exchange(other.m_executor_size, nullptr))
×
18
{
19
}
×
20

21
auto promise_self_deleting::operator=(promise_self_deleting&& other) -> promise_self_deleting&
×
22
{
23
    if (std::addressof(other) != nullptr)
×
24
    {
NEW
25
        m_executor_size = std::exchange(other.m_executor_size, nullptr);
×
26
    }
27

28
    return *this;
×
29
}
30

31
auto promise_self_deleting::get_return_object() -> task_self_deleting
400,306✔
32
{
33
    return task_self_deleting{*this};
400,306✔
34
}
35

36
auto promise_self_deleting::initial_suspend() -> std::suspend_always
400,306✔
37
{
38
    return std::suspend_always{};
400,306✔
39
}
40

41
auto promise_self_deleting::final_suspend() noexcept -> std::suspend_never
400,306✔
42
{
43
    // Notify the task_container<executor_t> that this coroutine has completed.
44
    if (m_executor_size != nullptr)
400,306✔
45
    {
46
        m_executor_size->fetch_sub(1, std::memory_order::release);
400,306✔
47
    }
48

49
    // By not suspending this lets the coroutine destroy itself.
50
    return std::suspend_never{};
400,306✔
51
}
52

53
auto promise_self_deleting::return_void() noexcept -> void
400,306✔
54
{
55
    // no-op
56
}
400,306✔
57

58
auto promise_self_deleting::unhandled_exception() -> void
×
59
{
60
    // The user cannot access the promise anyways, ignore the exception.
61
}
×
62

63
auto promise_self_deleting::executor_size(std::atomic<std::size_t>& executor_size) -> void
400,306✔
64
{
65
    m_executor_size = &executor_size;
400,306✔
66
}
400,306✔
67

68
task_self_deleting::task_self_deleting(promise_self_deleting& promise) : m_promise(&promise)
400,306✔
69
{
70
}
400,306✔
71

72
task_self_deleting::~task_self_deleting()
400,306✔
73
{
74
}
400,306✔
75

76
task_self_deleting::task_self_deleting(task_self_deleting&& other) : m_promise(other.m_promise)
×
77
{
78
}
×
79

80
auto task_self_deleting::operator=(task_self_deleting&& other) -> task_self_deleting&
×
81
{
82
    if (std::addressof(other) != this)
×
83
    {
84
        m_promise = other.m_promise;
×
85
    }
86

87
    return *this;
×
88
}
89

90
auto make_task_self_deleting(coro::task<void> user_task) -> task_self_deleting
400,306✔
91
{
92
    co_await user_task;
93
    co_return;
94
}
800,612✔
95

96
} // namespace coro::detail
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc