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

jbaldwin / libcoro / 13476456502

22 Feb 2025 08:49PM UTC coverage: 86.142%. First build
13476456502

Pull #305

github

web-flow
Merge 16503ca65 into eef5815cb
Pull Request #305: task_self_deleting bugfix in copy assignment operator

0 of 1 new or added line in 1 file covered. (0.0%)

1411 of 1638 relevant lines covered (86.14%)

4263878.05 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,519✔
9
{
10
}
400,519✔
11

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

16
promise_self_deleting::promise_self_deleting(promise_self_deleting&& other)
×
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
{
NEW
23
    if (std::addressof(other) != this)
×
24
    {
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,519✔
32
{
33
    return task_self_deleting{*this};
400,519✔
34
}
35

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

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

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

53
auto promise_self_deleting::return_void() noexcept -> void
400,518✔
54
{
55
    // no-op
56
}
400,518✔
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,507✔
64
{
65
    m_executor_size = &executor_size;
400,507✔
66
}
400,507✔
67

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

72
task_self_deleting::~task_self_deleting()
400,518✔
73
{
74
}
400,518✔
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,507✔
91
{
92
    co_await user_task;
93
    co_return;
94
}
801,014✔
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