# HG changeset patch # User Benjamin Golinvaux # Date 1566562605 -7200 # Node ID 13e078adfb94ea40d297a8f8c446130ceed5929f # Parent 769249e1f3b424d04eb57e6c95e2487120c670f8 Better error log in fetch failure callback + timeout 600sec in OrthancRestApiCommand + guard against dead controller access in PanSceneTracker + relaxed DicomStructureSet AddReferenceSlice method to accept extraneous adds of the same slice (while trying to understand how it happens in the first place) diff -r 769249e1f3b4 -r 13e078adfb94 Framework/Oracle/OrthancRestApiCommand.cpp --- a/Framework/Oracle/OrthancRestApiCommand.cpp Fri Aug 23 10:16:32 2019 +0200 +++ b/Framework/Oracle/OrthancRestApiCommand.cpp Fri Aug 23 14:16:45 2019 +0200 @@ -51,7 +51,7 @@ OrthancRestApiCommand::OrthancRestApiCommand() : method_(Orthanc::HttpMethod_Get), uri_("/"), - timeout_(60) + timeout_(600) { } diff -r 769249e1f3b4 -r 13e078adfb94 Framework/Oracle/WebAssemblyOracle.cpp --- a/Framework/Oracle/WebAssemblyOracle.cpp Fri Aug 23 10:16:32 2019 +0200 +++ b/Framework/Oracle/WebAssemblyOracle.cpp Fri Aug 23 14:16:45 2019 +0200 @@ -237,13 +237,23 @@ { std::auto_ptr context(reinterpret_cast(fetch->userData)); - LOG(ERROR) << "Fetching " << fetch->url << " failed, HTTP failure status code: " << fetch->status; + const size_t kEmscriptenStatusTextSize = sizeof(emscripten_fetch_t::statusText); + char message[kEmscriptenStatusTextSize + 1]; + memcpy(message, fetch->statusText, kEmscriptenStatusTextSize); + message[kEmscriptenStatusTextSize] = 0; + + LOG(ERROR) << "Fetching " << fetch->url + << " failed, HTTP failure status code: " << fetch->status + << " | statusText = " << message + << " | numBytes = " << fetch->numBytes + << " | totalBytes = " << fetch->totalBytes + << " | readyState = " << fetch->readyState; /** * TODO - The following code leads to an infinite recursion, at * least with Firefox running on incognito mode => WHY? **/ - //emscripten_fetch_close(fetch); // Also free data on failure. + emscripten_fetch_close(fetch); // Also free data on failure. } }; diff -r 769249e1f3b4 -r 13e078adfb94 Framework/Scene2D/PanSceneTracker.cpp --- a/Framework/Scene2D/PanSceneTracker.cpp Fri Aug 23 10:16:32 2019 +0200 +++ b/Framework/Scene2D/PanSceneTracker.cpp Fri Aug 23 14:16:45 2019 +0200 @@ -37,17 +37,26 @@ void PanSceneTracker::PointerMove(const PointerEvent& event) { ScenePoint2D p = event.GetMainPosition().Apply(originalCanvasToScene_); - - GetController()->SetSceneToCanvasTransform( - AffineTransform2D::Combine( - originalSceneToCanvas_, - AffineTransform2D::CreateOffset(p.GetX() - pivot_.GetX(), - p.GetY() - pivot_.GetY()))); + + // The controller is a weak pointer. It could be deleted when the + // tracker is still alive (for instance, because of a lost WebGL + // context) + if(GetController().get() != NULL) + { + GetController()->SetSceneToCanvasTransform( + AffineTransform2D::Combine( + originalSceneToCanvas_, + AffineTransform2D::CreateOffset(p.GetX() - pivot_.GetX(), + p.GetY() - pivot_.GetY()))); + } } void PanSceneTracker::Cancel() { - GetController()->SetSceneToCanvasTransform(originalSceneToCanvas_); + if(GetController().get() != NULL) + { + GetController()->SetSceneToCanvasTransform(originalSceneToCanvas_); + } } } diff -r 769249e1f3b4 -r 13e078adfb94 Framework/Toolbox/DicomStructureSet.cpp --- a/Framework/Toolbox/DicomStructureSet.cpp Fri Aug 23 10:16:32 2019 +0200 +++ b/Framework/Toolbox/DicomStructureSet.cpp Fri Aug 23 14:16:45 2019 +0200 @@ -581,7 +581,11 @@ { // This geometry is already known LOG(ERROR) << "DicomStructureSet::AddReferencedSlice(): (referencedSlices_.find(sopInstanceUid) != referencedSlices_.end()). sopInstanceUid = " << sopInstanceUid; - throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); + + // TODO: the following assertion has been disabled on 20190822 by BGO + // because it occurred from time to time. Since it wrecked havoc on the + + //throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); } else {