comparison OrthancServer/Plugins/Engine/OrthancPlugins.cpp @ 5410:16cbfefa15e9

Solved a deadlock related to the Job Engine events and plugins
author Alain Mazy <am@osimis.io>
date Tue, 07 Nov 2023 12:52:37 +0100
parents 0e5e675b9750
children ca9cf4d46883
comparison
equal deleted inserted replaced
5409:68231ca4363a 5410:16cbfefa15e9
2728 Plugins::Convert(change.GetResourceType()), 2728 Plugins::Convert(change.GetResourceType()),
2729 change.GetPublicId().c_str()); 2729 change.GetPublicId().c_str());
2730 } 2730 }
2731 2731
2732 2732
2733 void OrthancPlugins::SignalJobEvent(const JobEvent& event)
2734 {
2735 // job events are actually considered as changes inside plugins -> translate
2736 switch (event.GetEventType())
2737 {
2738 case JobEventType_Submitted:
2739 SignalChangeInternal(OrthancPluginChangeType_JobSubmitted, OrthancPluginResourceType_None, event.GetJobId().c_str());
2740 break;
2741 case JobEventType_Success:
2742 SignalChangeInternal(OrthancPluginChangeType_JobSuccess, OrthancPluginResourceType_None, event.GetJobId().c_str());
2743 break;
2744 case JobEventType_Failure:
2745 SignalChangeInternal(OrthancPluginChangeType_JobFailure, OrthancPluginResourceType_None, event.GetJobId().c_str());
2746 break;
2747 default:
2748 throw OrthancException(ErrorCode_InternalError);
2749 }
2750 }
2751
2733 2752
2734 void OrthancPlugins::RegisterRestCallback(const void* parameters, 2753 void OrthancPlugins::RegisterRestCallback(const void* parameters,
2735 bool mutualExclusion) 2754 bool mutualExclusion)
2736 { 2755 {
2737 const _OrthancPluginRestCallback& p = 2756 const _OrthancPluginRestCallback& p =
2774 } 2793 }
2775 2794
2776 2795
2777 void OrthancPlugins::RegisterOnChangeCallback(const void* parameters) 2796 void OrthancPlugins::RegisterOnChangeCallback(const void* parameters)
2778 { 2797 {
2798 boost::recursive_mutex::scoped_lock lock(pimpl_->changeCallbackMutex_);
2799
2779 const _OrthancPluginOnChangeCallback& p = 2800 const _OrthancPluginOnChangeCallback& p =
2780 *reinterpret_cast<const _OrthancPluginOnChangeCallback*>(parameters); 2801 *reinterpret_cast<const _OrthancPluginOnChangeCallback*>(parameters);
2781 2802
2782 CLOG(INFO, PLUGINS) << "Plugin has registered an OnChange callback"; 2803 CLOG(INFO, PLUGINS) << "Plugin has registered an OnChange callback";
2783 pimpl_->onChangeCallbacks_.push_back(p.callback); 2804 pimpl_->onChangeCallbacks_.push_back(p.callback);