diff Platforms/Generic/WebServiceCommandBase.cpp @ 271:46c5296d867e am-2

OracleWebService and BasicSdlApplicationContext using the same global mutex
author am@osimis.io
date Thu, 23 Aug 2018 17:12:54 +0200
parents 89d02de83c03
children dc1beee33134
line wrap: on
line diff
--- a/Platforms/Generic/WebServiceCommandBase.cpp	Thu Aug 23 14:45:04 2018 +0200
+++ b/Platforms/Generic/WebServiceCommandBase.cpp	Thu Aug 23 17:12:54 2018 +0200
@@ -26,17 +26,19 @@
 namespace OrthancStone
 {
   WebServiceCommandBase::WebServiceCommandBase(MessageBroker& broker,
-                                             IWebService::ICallback& callback,
-                                             const Orthanc::WebServiceParameters& parameters,
-                                             const std::string& uri,
-                                             const IWebService::Headers& headers,
-                                             Orthanc::IDynamicObject* payload /* takes ownership */) :
+                                               IWebService::ICallback& callback,
+                                               const Orthanc::WebServiceParameters& parameters,
+                                               const std::string& uri,
+                                               const IWebService::Headers& headers,
+                                               Orthanc::IDynamicObject* payload /* takes ownership */,
+                                               BasicSdlApplicationContext& context) :
     IObservable(broker),
     callback_(callback),
     parameters_(parameters),
     uri_(uri),
     headers_(headers),
-    payload_(payload)
+    payload_(payload),
+    context_(context)
   {
     DeclareEmittableMessage(MessageType_HttpRequestError);
     DeclareEmittableMessage(MessageType_HttpRequestSuccess);
@@ -46,6 +48,8 @@
 
   void WebServiceCommandBase::Commit()
   {
+    BasicSdlApplicationContext::GlobalMutexLocker lock(context_);  // we want to make sure that, i.e, the UpdateThread is not triggered while we are updating the "model" with the result of a WebServiceCommand
+
     if (success_)
     {
       IWebService::ICallback::HttpRequestSuccessMessage message(uri_, answer_.c_str(), answer_.size(), payload_.release());