From 1015adf32256b6ffeb44f5e75df537f5562fa7ae Mon Sep 17 00:00:00 2001
From: PavelK ProductEngine <pkrivich@productengine.com>
Date: Thu, 25 Jul 2013 19:37:15 +0300
Subject: [PATCH] MAINT-2715 FIX Capabilities request handling not working
 properly if request gets lost

---
 indra/newview/llviewerregion.cpp | 1 +
 indra/newview/llworld.cpp        | 9 +++++++++
 2 files changed, 10 insertions(+)

diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 778c0ee61a8..04ec98d514b 100755
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -232,6 +232,7 @@ class BaseCapabilitiesComplete : public LLHTTPClient::Responder
 		if( mID != regionp->getHttpResponderID() ) // region is no longer referring to this responder
 		{
 			LL_WARNS2("AppInit", "Capabilities") << "Received results for a stale http responder!" << LL_ENDL;
+			regionp->failedSeedCapability();
 			return ;
 		}
 
diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp
index 7996f8a6400..103668d0510 100755
--- a/indra/newview/llworld.cpp
+++ b/indra/newview/llworld.cpp
@@ -140,6 +140,7 @@ LLViewerRegion* LLWorld::addRegion(const U64 &region_handle, const LLHost &host)
 {
 	llinfos << "Add region with handle: " << region_handle << " on host " << host << llendl;
 	LLViewerRegion *regionp = getRegionFromHandle(region_handle);
+	std::string seedUrl;
 	if (regionp)
 	{
 		llinfos << "Region exists, removing it " << llendl;
@@ -161,6 +162,9 @@ LLViewerRegion* LLWorld::addRegion(const U64 &region_handle, const LLHost &host)
 			llwarns << "LLWorld::addRegion exists, but isn't alive" << llendl;
 		}
 
+		// Save capabilities seed URL
+		seedUrl = regionp->getCapability("Seed");
+
 		// Kill the old host, and then we can continue on and add the new host.  We have to kill even if the host
 		// matches, because all the agent state for the new camera is completely different.
 		removeRegion(old_host);
@@ -188,6 +192,11 @@ LLViewerRegion* LLWorld::addRegion(const U64 &region_handle, const LLHost &host)
 		llerrs << "Unable to create new region!" << llendl;
 	}
 
+	if ( !seedUrl.empty() )
+	{
+		regionp->setCapability("Seed", seedUrl);
+	}
+
 	mRegionList.push_back(regionp);
 	mActiveRegionList.push_back(regionp);
 	mCulledRegionList.push_back(regionp);
-- 
GitLab