diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/llfloaterbuyland.cpp | 16 | ||||
| -rw-r--r-- | indra/newview/llviewerparcelmgr.cpp | 7 | ||||
| -rw-r--r-- | indra/newview/llviewerparcelmgr.h | 2 | 
3 files changed, 19 insertions, 6 deletions
| diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp index 2c2a5107f5..36f0315790 100644 --- a/indra/newview/llfloaterbuyland.cpp +++ b/indra/newview/llfloaterbuyland.cpp @@ -81,6 +81,8 @@ public:  	LLFloaterBuyLandUI(const LLSD& key);  	virtual ~LLFloaterBuyLandUI(); +	/*virtual*/ void onClose(bool app_quitting); +	  private:  	class SelectionObserver : public LLParcelObserver  	{ @@ -300,11 +302,21 @@ LLFloaterBuyLandUI::LLFloaterBuyLandUI(const LLSD& key)  LLFloaterBuyLandUI::~LLFloaterBuyLandUI()  {  	LLViewerParcelMgr::getInstance()->removeObserver(&mParcelSelectionObserver); -	LLViewerParcelMgr::getInstance()->deleteParcelBuy(mParcelBuyInfo); +	LLViewerParcelMgr::getInstance()->deleteParcelBuy(&mParcelBuyInfo);  	delete mTransaction;  } +// virtual +void LLFloaterBuyLandUI::onClose(bool app_quitting) +{ +	// This object holds onto observer, transactions, and parcel state. +	// Despite being single_instance, destroy it to call destructors and clean +	// everything up. +	setVisible(FALSE); +	destroy(); +} +  void LLFloaterBuyLandUI::SelectionObserver::changed()  {  	if (LLViewerParcelMgr::getInstance()->selectionEmpty()) @@ -756,7 +768,7 @@ void LLFloaterBuyLandUI::sendBuyLand()  	if (mParcelBuyInfo)  	{  		LLViewerParcelMgr::getInstance()->sendParcelBuy(mParcelBuyInfo); -		LLViewerParcelMgr::getInstance()->deleteParcelBuy(mParcelBuyInfo); +		LLViewerParcelMgr::getInstance()->deleteParcelBuy(&mParcelBuyInfo);  		mBought = true;  	}  } diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index 44de848d19..77b023f6dd 100644 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -1162,10 +1162,11 @@ void LLViewerParcelMgr::sendParcelBuy(ParcelBuyInfo* info)  	msg->sendReliable(info->mHost);  } -void LLViewerParcelMgr::deleteParcelBuy(ParcelBuyInfo*& info) +void LLViewerParcelMgr::deleteParcelBuy(ParcelBuyInfo* *info)  { -	delete info; -	info = NULL; +	// Must be here because ParcelBuyInfo is local to this .cpp file +	delete *info; +	*info = NULL;  }  void LLViewerParcelMgr::sendParcelDeed(const LLUUID& group_id) diff --git a/indra/newview/llviewerparcelmgr.h b/indra/newview/llviewerparcelmgr.h index 3964a56bf6..1c8fe23dba 100644 --- a/indra/newview/llviewerparcelmgr.h +++ b/indra/newview/llviewerparcelmgr.h @@ -246,7 +246,7 @@ public:  								  BOOL remove_contribution);  		// callers responsibility to call deleteParcelBuy() on return value  	void sendParcelBuy(ParcelBuyInfo*); -	void deleteParcelBuy(ParcelBuyInfo*&); +	void deleteParcelBuy(ParcelBuyInfo* *info);  	void sendParcelDeed(const LLUUID& group_id); | 
