https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118757

            Bug ID: 118757
           Summary: Waiting for stored pointer inside
                    std::atomic<std::shared_ptr<T>>
           Product: gcc
           Version: 14.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: fchelnokov at gmail dot com
  Target Milestone: ---

According to https://devblogs.microsoft.com/oldnewthing/20250109-00/?p=110738
the following C++20 program
```
#include <memory>
#include <chrono>
#include <thread>

std::shared_ptr<int> q = std::make_shared<int>(42);
std::atomic<std::shared_ptr<int>> p = q;

void signaler()
{
    std::this_thread::sleep_for(std::chrono::seconds(1));
    p.store({ q, nullptr });
    p.notify_one();
    std::this_thread::sleep_for(std::chrono::seconds(1));
    std::terminate();
}

int main(int, char**)
{
    std::thread(signaler).detach();
    p.wait(q);
    return 0;
}
```
must finish gracefully by return 0; and not by std::terminate, because
p.wait(q) must stop immediately after p.store({ q, nullptr }); p.notify_one();

Online demo: https://gcc.godbolt.org/z/hqG5T8469

Reply via email to