From 5a5e49dd5d238764d38343fc98e07dc5929804e1 Mon Sep 17 00:00:00 2001 From: Matej Sekoranja Date: Sat, 22 Mar 2014 22:11:43 +0100 Subject: [PATCH] simpleSearchManager: immediate search (same thread) for first/the only channel --- .../remote/simpleChannelSearchManagerImpl.cpp | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/pvAccessApp/remote/simpleChannelSearchManagerImpl.cpp b/pvAccessApp/remote/simpleChannelSearchManagerImpl.cpp index 773a2bc..f747bf5 100644 --- a/pvAccessApp/remote/simpleChannelSearchManagerImpl.cpp +++ b/pvAccessApp/remote/simpleChannelSearchManagerImpl.cpp @@ -107,13 +107,20 @@ void SimpleChannelSearchManagerImpl::registerSearchInstance(SearchInstance::shar if (m_canceled.get()) return; - Lock guard(m_channelMutex); - //overrides if already registered - m_channels[channel->getSearchInstanceID()] = channel; - - Lock guard2(m_userValueMutex); - int32_t& userValue = channel->getUserValue(); - userValue = 1; + bool immediateTrigger; + { + Lock guard(m_channelMutex); + //overrides if already registered + m_channels[channel->getSearchInstanceID()] = channel; + immediateTrigger = m_channels.size() == 1; + + Lock guard2(m_userValueMutex); + int32_t& userValue = channel->getUserValue(); + userValue = 1; + } + + if (immediateTrigger) + callback(); } void SimpleChannelSearchManagerImpl::unregisterSearchInstance(SearchInstance::shared_pointer const & channel)