diff options
| author | andreykproductengine <akleshchev@productengine.com> | 2017-04-11 18:43:44 +0300 | 
|---|---|---|
| committer | andreykproductengine <akleshchev@productengine.com> | 2017-04-11 18:43:44 +0300 | 
| commit | 8f2981f0cf64ce4fdf6af32799113d99f1552cf7 (patch) | |
| tree | f2d9008683feaf8b26d27c0bb2288cf8329efbce /indra | |
| parent | 9e426f5340d348270ee6014e6e338102758563db (diff) | |
MAINT-7243 Fixed Crash when creating IM session if failed to resolve name
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/llimview.cpp | 82 | 
1 files changed, 45 insertions, 37 deletions
| diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index ff8b8b0403..0b0399c9d7 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -2677,49 +2677,57 @@ void LLIMMgr::addMessage(  		LLIMModel::getInstance()->newSession(new_session_id, fixed_session_name, dialog, other_participant_id, false, is_offline_msg);  		LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(new_session_id); -		skip_message &= !session->isGroupSessionType();			// Do not skip group chats... -		if(skip_message) +		if (session)  		{ -			gIMMgr->leaveSession(new_session_id); -		} -		// When we get a new IM, and if you are a god, display a bit -		// of information about the source. This is to help liaisons -		// when answering questions. -		if(gAgent.isGodlike()) -		{ -			// *TODO:translate (low priority, god ability) -			std::ostringstream bonus_info; -			bonus_info << LLTrans::getString("***")+ " "+ LLTrans::getString("IMParentEstate") + ":" + " " -				<< parent_estate_id -				<< ((parent_estate_id == 1) ? "," + LLTrans::getString("IMMainland") : "") -				<< ((parent_estate_id == 5) ? "," + LLTrans::getString ("IMTeen") : ""); - -			// once we have web-services (or something) which returns -			// information about a region id, we can print this out -			// and even have it link to map-teleport or something. -			//<< "*** region_id: " << region_id << std::endl -			//<< "*** position: " << position << std::endl; +			skip_message &= !session->isGroupSessionType();			// Do not skip group chats... +			if (skip_message) +			{ +				gIMMgr->leaveSession(new_session_id); +			} +			// When we get a new IM, and if you are a god, display a bit +			// of information about the source. This is to help liaisons +			// when answering questions. +			if (gAgent.isGodlike()) +			{ +				// *TODO:translate (low priority, god ability) +				std::ostringstream bonus_info; +				bonus_info << LLTrans::getString("***") + " " + LLTrans::getString("IMParentEstate") + ":" + " " +					<< parent_estate_id +					<< ((parent_estate_id == 1) ? "," + LLTrans::getString("IMMainland") : "") +					<< ((parent_estate_id == 5) ? "," + LLTrans::getString("IMTeen") : ""); + +				// once we have web-services (or something) which returns +				// information about a region id, we can print this out +				// and even have it link to map-teleport or something. +				//<< "*** region_id: " << region_id << std::endl +				//<< "*** position: " << position << std::endl; + +				LLIMModel::instance().addMessage(new_session_id, from, other_participant_id, bonus_info.str()); +			} -			LLIMModel::instance().addMessage(new_session_id, from, other_participant_id, bonus_info.str()); -		} +			// Logically it would make more sense to reject the session sooner, in another area of the +			// code, but the session has to be established inside the server before it can be left. +			if (LLMuteList::getInstance()->isMuted(other_participant_id, LLMute::flagTextChat) && !from_linden) +			{ +				LL_WARNS() << "Leaving IM session from initiating muted resident " << from << LL_ENDL; +				if (!gIMMgr->leaveSession(new_session_id)) +				{ +					LL_INFOS() << "Session " << new_session_id << " does not exist." << LL_ENDL; +				} +				return; +			} -		// Logically it would make more sense to reject the session sooner, in another area of the -		// code, but the session has to be established inside the server before it can be left. -		if (LLMuteList::getInstance()->isMuted(other_participant_id, LLMute::flagTextChat) && !from_linden) -		{ -			LL_WARNS() << "Leaving IM session from initiating muted resident " << from << LL_ENDL; -			if(!gIMMgr->leaveSession(new_session_id)) +			//Play sound for new conversations +			if (!gAgent.isDoNotDisturb() && (gSavedSettings.getBOOL("PlaySoundNewConversation") == TRUE))  			{ -				LL_INFOS() << "Session " << new_session_id << " does not exist." << LL_ENDL; +				make_ui_sound("UISndNewIncomingIMSession");  			} -			return;  		} - -        //Play sound for new conversations -		if (!gAgent.isDoNotDisturb() && (gSavedSettings.getBOOL("PlaySoundNewConversation") == TRUE)) -        { -            make_ui_sound("UISndNewIncomingIMSession"); -        } +		else +		{ +			// Failed to create a session, most likely due to empty name (name cache failed?) +			LL_WARNS() << "Failed to create IM session " << fixed_session_name << LL_ENDL; +		}  	}  	if (!LLMuteList::getInstance()->isMuted(other_participant_id, LLMute::flagTextChat) && !skip_message) | 
