Mercurial > hg > orthanc
diff OrthancServer/Plugins/Engine/OrthancPlugins.cpp @ 4364:d527a081f92d
Allow concurrency on the OrthancPluginRegisterIncomingHttpRequestFilter() callbacks
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 09 Dec 2020 16:17:46 +0100 |
parents | e1e918e790e8 |
children | 79ef2b6d8e76 |
line wrap: on
line diff
--- a/OrthancServer/Plugins/Engine/OrthancPlugins.cpp Wed Dec 09 10:07:48 2020 +0100 +++ b/OrthancServer/Plugins/Engine/OrthancPlugins.cpp Wed Dec 09 16:17:46 2020 +0100 @@ -930,6 +930,7 @@ boost::mutex refreshMetricsMutex_; boost::mutex storageCommitmentScpMutex_; boost::recursive_mutex invokeServiceMutex_; + boost::shared_mutex incomingHttpRequestFilterMutex_; // New in Orthanc 1.9.0 Properties properties_; int argc_; @@ -2155,6 +2156,8 @@ const _OrthancPluginIncomingHttpRequestFilter& p = *reinterpret_cast<const _OrthancPluginIncomingHttpRequestFilter*>(parameters); + boost::unique_lock<boost::shared_mutex> lock(pimpl_->incomingHttpRequestFilterMutex_); + CLOG(INFO, PLUGINS) << "Plugin has registered a callback to filter incoming HTTP requests"; pimpl_->incomingHttpRequestFilters_.push_back(p.callback); } @@ -2165,6 +2168,8 @@ const _OrthancPluginIncomingHttpRequestFilter2& p = *reinterpret_cast<const _OrthancPluginIncomingHttpRequestFilter2*>(parameters); + boost::unique_lock<boost::shared_mutex> lock(pimpl_->incomingHttpRequestFilterMutex_); + CLOG(INFO, PLUGINS) << "Plugin has registered a callback to filter incoming HTTP requests"; pimpl_->incomingHttpRequestFilters2_.push_back(p.callback); } @@ -4423,6 +4428,14 @@ return true; } + case _OrthancPluginService_RegisterIncomingHttpRequestFilter: + RegisterIncomingHttpRequestFilter(parameters); + return true; + + case _OrthancPluginService_RegisterIncomingHttpRequestFilter2: + RegisterIncomingHttpRequestFilter2(parameters); + return true; + default: return false; } @@ -4484,14 +4497,6 @@ RegisterJobsUnserializer(parameters); return true; - case _OrthancPluginService_RegisterIncomingHttpRequestFilter: - RegisterIncomingHttpRequestFilter(parameters); - return true; - - case _OrthancPluginService_RegisterIncomingHttpRequestFilter2: - RegisterIncomingHttpRequestFilter2(parameters); - return true; - case _OrthancPluginService_RegisterIncomingDicomInstanceFilter: RegisterIncomingDicomInstanceFilter(parameters); return true; @@ -4940,7 +4945,7 @@ } { - boost::recursive_mutex::scoped_lock lock(pimpl_->invokeServiceMutex_); + boost::shared_lock<boost::shared_mutex> lock(pimpl_->incomingHttpRequestFilterMutex_); // Improved callback with support for GET arguments, since Orthanc 1.3.0 for (PImpl::IncomingHttpRequestFilters2::const_iterator