Mercurial > hg > orthanc
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); |