From 83b2105241e925b14f1d7dfdb883c2c874fd391d Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Wed, 26 Sep 2018 14:56:11 -0700 Subject: [PATCH] StaticProvider createChannel() avoid possible deadlock connect() may invoke SharedPV onFirstConnect() callback. --- src/server/server.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/server/server.cpp b/src/server/server.cpp index ba4867e..7e64650 100644 --- a/src/server/server.cpp +++ b/src/server/server.cpp @@ -87,12 +87,17 @@ struct StaticProvider::Impl : public pva::ChannelProvider pva::Channel::shared_pointer ret; pvd::Status sts; + builders_t::mapped_type builder; { Guard G(mutex); builders_t::const_iterator it(builders.find(name)); - if(it!=builders.end()) - ret = it->second->connect(Impl::shared_pointer(internal_self), name, requester); + if(it!=builders.end()) { + UnGuard U(G); + builder = it->second; + } } + if(builder) + ret = builder->connect(Impl::shared_pointer(internal_self), name, requester); if(!ret) { sts = pvd::Status::error("No such channel");