From d7f372d6bee42f405e0e3772ff8c30f4c1bf6612 Mon Sep 17 00:00:00 2001
From: Todd Stinson <stinson@lindenlab.com>
Date: Mon, 9 Jul 2012 13:29:50 -0700
Subject: [PATCH] BUGFIX: Correcting a crash issue that was caused by the
 rebake navmesh callback handler unexpectedly changing the navmesh state.

---
 indra/cmake/LLPhysicsExtensions.cmake             |  2 +-
 indra/newview/llpanelpathfindingrebakenavmesh.cpp | 15 +++++++++------
 indra/newview/llpanelpathfindingrebakenavmesh.h   |  3 ++-
 3 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/indra/cmake/LLPhysicsExtensions.cmake b/indra/cmake/LLPhysicsExtensions.cmake
index 2d26360d79e..c5aff4dadfb 100644
--- a/indra/cmake/LLPhysicsExtensions.cmake
+++ b/indra/cmake/LLPhysicsExtensions.cmake
@@ -22,7 +22,7 @@ find_library(LL_PHYSICS_RELWITHDEBINFO_LIB ${LLPHYSICS_EXTENSIONS_LIB_NAME} PATH
 set(LLPHYSICS_LIBRARIES
 
     debug     ${LL_PHYSICS_DEBUG_LIB}
-    optimized ${LL_PHYSICS_RELEASE_LIB}
+    optimized ${LL_PHYSICS_RELWITHDEBINFO_LIB}
 )
 
 if (LINUX)
diff --git a/indra/newview/llpanelpathfindingrebakenavmesh.cpp b/indra/newview/llpanelpathfindingrebakenavmesh.cpp
index 2c8c46c7bce..8df041f5781 100644
--- a/indra/newview/llpanelpathfindingrebakenavmesh.cpp
+++ b/indra/newview/llpanelpathfindingrebakenavmesh.cpp
@@ -159,6 +159,11 @@ void LLPanelPathfindingRebakeNavmesh::setMode(ERebakeNavMeshMode pRebakeNavMeshM
 	mRebakeNavMeshMode = pRebakeNavMeshMode;
 }
 
+LLPanelPathfindingRebakeNavmesh::ERebakeNavMeshMode LLPanelPathfindingRebakeNavmesh::getMode() const
+{
+	return mRebakeNavMeshMode;
+}
+
 void LLPanelPathfindingRebakeNavmesh::onNavMeshRebakeClick()
 {
 	setMode(kRebakeNavMesh_RequestSent);
@@ -172,16 +177,14 @@ void LLPanelPathfindingRebakeNavmesh::handleAgentState(BOOL pCanRebakeRegion)
 
 void LLPanelPathfindingRebakeNavmesh::handleRebakeNavMeshResponse(bool pResponseStatus)
 {
-	setMode(pResponseStatus ? kRebakeNavMesh_InProgress : kRebakeNavMesh_Default);
-	if (!pResponseStatus)
+	if (getMode() == kRebakeNavMesh_RequestSent)
 	{
-		LLNotificationsUtil::add("PathfindingCannotRebakeNavmesh");
+		setMode(pResponseStatus ? kRebakeNavMesh_InProgress : kRebakeNavMesh_Default);
 	}
 
-	LLViewerRegion *currentRegion = gAgent.getRegion();
-	if (currentRegion != NULL)
+	if (!pResponseStatus)
 	{
-		LLPathfindingManager::getInstance()->requestGetNavMeshForRegion(currentRegion, true);
+		LLNotificationsUtil::add("PathfindingCannotRebakeNavmesh");
 	}
 }
 
diff --git a/indra/newview/llpanelpathfindingrebakenavmesh.h b/indra/newview/llpanelpathfindingrebakenavmesh.h
index 5fe581ec2f5..48764f2aa77 100644
--- a/indra/newview/llpanelpathfindingrebakenavmesh.h
+++ b/indra/newview/llpanelpathfindingrebakenavmesh.h
@@ -66,7 +66,8 @@ class LLPanelPathfindingRebakeNavmesh : public LLPanel
 
 	static LLPanelPathfindingRebakeNavmesh* getPanel();
 
-	void setMode(ERebakeNavMeshMode pRebakeNavMeshMode);
+	void               setMode(ERebakeNavMeshMode pRebakeNavMeshMode);
+	ERebakeNavMeshMode getMode() const;
 	
 	void onNavMeshRebakeClick();
 
-- 
GitLab