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

jbaldwin / libcoro / 13041658666

29 Jan 2025 10:28PM UTC coverage: 84.577%. First build
13041658666

Pull #288

github

web-flow
Merge f299a9da1 into 26de94ded
Pull Request #288: coro::task_container gc fix not completing coroutines

41 of 59 new or added lines in 6 files covered. (69.49%)

1371 of 1621 relevant lines covered (84.58%)

4304824.16 hits per line

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

57.89
/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,504✔
9
{
10
    (void)m_task_container_size; // make codacy happy
11
}
400,504✔
12

13
promise_self_deleting::~promise_self_deleting()
400,504✔
14
{
15

16
}
400,504✔
17

NEW
18
promise_self_deleting::promise_self_deleting(promise_self_deleting&& other)
×
NEW
19
    : m_task_container_size(std::exchange(other.m_task_container_size, nullptr))
×
20
{
21

NEW
22
}
×
23

NEW
24
auto promise_self_deleting::operator=(promise_self_deleting&& other) -> promise_self_deleting&
×
25
{
NEW
26
    if (std::addressof(other) != nullptr)
×
27
    {
NEW
28
        m_task_container_size = std::exchange(other.m_task_container_size, nullptr);
×
29
    }
30

NEW
31
    return *this;
×
32
}
33

34
auto promise_self_deleting::get_return_object() -> task_self_deleting
400,504✔
35
{
36
    return task_self_deleting{*this};
400,504✔
37
}
38

39
auto promise_self_deleting::initial_suspend() -> std::suspend_always
400,504✔
40
{
41
    return std::suspend_always{};
400,504✔
42
}
43

44
auto promise_self_deleting::final_suspend() noexcept -> std::suspend_never
400,504✔
45
{
46
    // Notify the task_container<executor_t> that this coroutine has completed.
47
    if (m_task_container_size != nullptr)
400,504✔
48
    {
49
        m_task_container_size->fetch_sub(1);
400,504✔
50
    }
51

52
    // By not suspending this lets the coroutine destroy itself.
53
    return std::suspend_never{};
400,504✔
54
}
55

56
auto promise_self_deleting::return_void() noexcept -> void
400,504✔
57
{
58
    // no-op
59
}
400,504✔
60

NEW
61
auto promise_self_deleting::unhandled_exception() -> void
×
62
{
63
    // The user cannot access the promise anyways, ignore the exception.
NEW
64
}
×
65

66
auto promise_self_deleting::task_container_size(std::atomic<std::size_t>& task_container_size) -> void
400,504✔
67
{
68
    m_task_container_size = &task_container_size;
400,504✔
69
}
400,504✔
70

71
task_self_deleting::task_self_deleting(promise_self_deleting& promise)
400,504✔
72
    : m_promise(&promise)
400,504✔
73
{
74

75
}
400,504✔
76

77
task_self_deleting::~task_self_deleting()
400,504✔
78
{
79

80
}
400,504✔
81

NEW
82
task_self_deleting::task_self_deleting(task_self_deleting&& other)
×
NEW
83
    : m_promise(other.m_promise)
×
84
{
85

NEW
86
}
×
87

NEW
88
auto task_self_deleting::operator=(task_self_deleting&& other) -> task_self_deleting&
×
89
{
NEW
90
    if (std::addressof(other) != this)
×
91
    {
NEW
92
        m_promise = other.m_promise;
×
93
    }
94

NEW
95
    return *this;
×
96
}
97

98
} // 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