From d2e5001e7e1a8adebce80a93b736dffc0d77069f Mon Sep 17 00:00:00 2001 From: dantmnf Date: Fri, 31 May 2024 20:55:14 +0800 Subject: [PATCH] fix: intentionally leak onnxruntime objects to avoid crash This should be reverted when it get fixed upstream --- src/MaaCore/Config/OnnxSessions.cpp | 11 +++++++++++ src/MaaCore/Config/OnnxSessions.h | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/MaaCore/Config/OnnxSessions.cpp b/src/MaaCore/Config/OnnxSessions.cpp index 33e8ae4747..df483fa1c7 100644 --- a/src/MaaCore/Config/OnnxSessions.cpp +++ b/src/MaaCore/Config/OnnxSessions.cpp @@ -98,3 +98,14 @@ bool asst::OnnxSessions::use_gpu(int device_id) gpu_enabled = true; return true; } + +asst::OnnxSessions::~OnnxSessions() +{ + // FIXME: intentionally leak ort objects to avoid crash (double free?) + // https://github.com/microsoft/onnxruntime/issues/15174 + auto leak_sessions = new decltype(m_sessions); + *leak_sessions = std::move(m_sessions); + + auto leak_options = new Ort::SessionOptions(nullptr); + *leak_options = std::move(m_options); +} diff --git a/src/MaaCore/Config/OnnxSessions.h b/src/MaaCore/Config/OnnxSessions.h index 9fea15c76b..6410886667 100644 --- a/src/MaaCore/Config/OnnxSessions.h +++ b/src/MaaCore/Config/OnnxSessions.h @@ -17,7 +17,7 @@ namespace asst class OnnxSessions final : public SingletonHolder, public AbstractResource { public: - virtual ~OnnxSessions() override = default; + virtual ~OnnxSessions(); virtual bool load(const std::filesystem::path& path) override; Ort::Session& get(const std::string& name);