diff --git a/modules/gapi/src/executor/gasync.cpp b/modules/gapi/src/executor/gasync.cpp index 902e6e1624..da8de7e097 100644 --- a/modules/gapi/src/executor/gasync.cpp +++ b/modules/gapi/src/executor/gasync.cpp @@ -37,9 +37,16 @@ class async_service { std::thread thrd; -public: async_service() = default ; +public: + // singleton + static async_service& instance() + { + static async_service the_ctx; + return the_ctx; + } + void add_task(std::function&& t){ if (!thread_started) { @@ -87,6 +94,8 @@ public: cv.notify_one(); } } + +protected: ~async_service(){ if (thread_started && thrd.joinable()) { @@ -99,7 +108,6 @@ public: } }; -async_service the_ctx; } namespace { @@ -169,7 +177,7 @@ void async_apply(GComputation& gcomp, std::function&& call_with_callback(apply_l,std::move(callback), DummyContext{}); }; - impl::the_ctx.add_task(l); + impl::async_service::instance().add_task(l); } std::future async_apply(GComputation& gcomp, GRunArgs &&ins, GRunArgsP &&outs, GCompileArgs &&args){ @@ -183,7 +191,7 @@ std::future async_apply(GComputation& gcomp, GRunArgs &&ins, GRunArgsP &&o call_with_future(apply_l, prms.value, DummyContext{}); }; - impl::the_ctx.add_task(l); + impl::async_service::instance().add_task(l); return f; } @@ -196,7 +204,7 @@ void async_apply(GComputation& gcomp, std::function&& call_with_callback(apply_l,std::move(callback), ctx); }; - impl::the_ctx.add_task(l); + impl::async_service::instance().add_task(l); } std::future async_apply(GComputation& gcomp, GRunArgs &&ins, GRunArgsP &&outs, GCompileArgs &&args, GAsyncContext& ctx){ @@ -210,7 +218,7 @@ std::future async_apply(GComputation& gcomp, GRunArgs &&ins, GRunArgsP &&o call_with_future(apply_l, prms.value, ctx); }; - impl::the_ctx.add_task(l); + impl::async_service::instance().add_task(l); return f; } @@ -224,7 +232,7 @@ void async(GCompiled& gcmpld, std::function&& callback call_with_callback(apply_l,std::move(callback), DummyContext{}); }; - impl::the_ctx.add_task(l); + impl::async_service::instance().add_task(l); } void async(GCompiled& gcmpld, std::function&& callback, GRunArgs &&ins, GRunArgsP &&outs, GAsyncContext& ctx){ @@ -236,7 +244,7 @@ void async(GCompiled& gcmpld, std::function&& callback call_with_callback(apply_l,std::move(callback), ctx); }; - impl::the_ctx.add_task(l); + impl::async_service::instance().add_task(l); } std::future async(GCompiled& gcmpld, GRunArgs &&ins, GRunArgsP &&outs){ @@ -250,7 +258,7 @@ std::future async(GCompiled& gcmpld, GRunArgs &&ins, GRunArgsP &&outs){ call_with_future(apply_l, prms.value, DummyContext{}); }; - impl::the_ctx.add_task(l); + impl::async_service::instance().add_task(l); return f; } @@ -265,7 +273,7 @@ std::future async(GCompiled& gcmpld, GRunArgs &&ins, GRunArgsP &&outs, GAs call_with_future(apply_l, prms.value, ctx); }; - impl::the_ctx.add_task(l); + impl::async_service::instance().add_task(l); return f; }