Merge bitcoin/bitcoin#34471: refactor: Use aliasing shared_ptr in Sock::Wait

faa016af542763492a63de8cc972f8f4b52a58cd refactor: Use aliasing shared_ptr in Sock::Wait (MarcoFalke)

Pull request description:

  Currently, a no-op lambda is used as the deleter for the temporary shared pointer helper in `Sock::Wait`. This is perfectly fine, but has a few style issues:

  * The lambda needs to be allocated on the heap
  * It triggers a false-positive upstream GCC-16-trunk bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123912

  Fix all issues by just using an aliasing shared pointer, which points to `this`, but is otherwise empty (sits on the stack without any heap allocations).

ACKs for top commit:
  hodlinator:
    ACK faa016af542763492a63de8cc972f8f4b52a58cd
  sedited:
    ACK faa016af542763492a63de8cc972f8f4b52a58cd
  vasild:
    ACK faa016af542763492a63de8cc972f8f4b52a58cd

Tree-SHA512: b7330862204e79fb61f30694accb16f9a24e5722bd0ceb098ca27c877cff921afa00c0cfd953d4cbb355e6433706961a25b628efefdbe0b48bdec2941eaaee7a
This commit is contained in:
merge-script 2026-03-09 10:54:47 +00:00
commit 7691e8a005
No known key found for this signature in database
GPG Key ID: 2EEB9F5CC09526C1

View File

@ -140,10 +140,12 @@ bool Sock::IsSelectable() const
bool Sock::Wait(std::chrono::milliseconds timeout, Event requested, Event* occurred) const
{
// We need a `shared_ptr` owning `this` for `WaitMany()`, but don't want
// We need a `shared_ptr` holding `this` for `WaitMany()`, but don't want
// `this` to be destroyed when the `shared_ptr` goes out of scope at the
// end of this function. Create it with a custom noop deleter.
std::shared_ptr<const Sock> shared{this, [](const Sock*) {}};
// end of this function.
// Create it with an aliasing shared_ptr that points to `this` without
// owning it.
std::shared_ptr<const Sock> shared{std::shared_ptr<const Sock>{}, this};
EventsPerSock events_per_sock{std::make_pair(shared, Events{requested})};