From 34eeb0717a309c88e94842d0a4ff265cfe745dbb Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Tue, 6 Jun 2017 08:50:57 +0200 Subject: [PATCH] SimpleChannelProviderFactory: weak_ptr to shared instance --- src/client/pv/pvAccess.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/client/pv/pvAccess.h b/src/client/pv/pvAccess.h index d43711a..9e670ba 100644 --- a/src/client/pv/pvAccess.h +++ b/src/client/pv/pvAccess.h @@ -1162,11 +1162,12 @@ struct SimpleChannelProviderFactory : public ChannelProviderFactory virtual ChannelProvider::shared_pointer sharedInstance() { epics::pvData::Lock L(sharedM); - if(!shared) { - std::tr1::shared_ptr empty; - shared.reset(new Provider(empty)); + ChannelProvider::shared_pointer ret(shared.lock()); + if(!ret) { + ret.reset(new Provider(std::tr1::shared_ptr())); + shared = ret; } - return shared; + return ret; } virtual ChannelProvider::shared_pointer newInstance(const std::tr1::shared_ptr& conf) @@ -1178,7 +1179,7 @@ struct SimpleChannelProviderFactory : public ChannelProviderFactory private: const std::string pname; epics::pvData::Mutex sharedM; - std::tr1::shared_ptr shared; + ChannelProvider::weak_pointer shared; }; /**