From c1a16acd537c8b0d6255b0f7a46a0aade0065774 Mon Sep 17 00:00:00 2001 From: levlam Date: Thu, 24 Dec 2020 17:12:50 +0300 Subject: [PATCH] Don't check that Stdin/Stdout/Stderr are unlocked on exit. --- tdutils/td/utils/port/StdStreams.cpp | 3 ++- tdutils/td/utils/port/detail/PollableFd.h | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/tdutils/td/utils/port/StdStreams.cpp b/tdutils/td/utils/port/StdStreams.cpp index 30603e1de..ef903bf72 100644 --- a/tdutils/td/utils/port/StdStreams.cpp +++ b/tdutils/td/utils/port/StdStreams.cpp @@ -24,7 +24,8 @@ namespace td { template static FileFd &get_file_fd() { static FileFd result = FileFd::from_native_fd(NativeFd(id, true)); - static auto guard = ScopeExit() + [&] { + static ExitGuard exit_guard; + static auto guard = SCOPE_EXIT { result.move_as_native_fd().release(); }; return result; diff --git a/tdutils/td/utils/port/detail/PollableFd.h b/tdutils/td/utils/port/detail/PollableFd.h index d8a0d8d7c..e03e00cd8 100644 --- a/tdutils/td/utils/port/detail/PollableFd.h +++ b/tdutils/td/utils/port/detail/PollableFd.h @@ -7,6 +7,7 @@ #pragma once #include "td/utils/common.h" +#include "td/utils/ExitGuard.h" #include "td/utils/format.h" #include "td/utils/List.h" #include "td/utils/logging.h" @@ -124,8 +125,10 @@ class PollableFdInfo : private ListNode { ~PollableFdInfo() { VLOG(fd) << native_fd() << " destroy PollableFdInfo"; - bool was_locked = lock_.test_and_set(std::memory_order_acquire); - CHECK(!was_locked); + if (!ExitGuard::is_exited()) { + bool was_locked = lock_.test_and_set(std::memory_order_acquire); + CHECK(!was_locked); + } } void add_flags_from_poll(PollFlags flags) {