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)