BOOL LLMessageLogFilterApply::tick()
{
	std::deque<LLMessageLogEntry>::iterator end = LLFloaterMessageLog::sMessageLogEntries.end();
	if(mIter == end || !LLFloaterMessageLog::sInstance)
	{
		mFinished = TRUE;
		if(LLFloaterMessageLog::sInstance)
		{
			if(LLFloaterMessageLog::sInstance->mMessageLogFilterApply == this)
			{
				LLFloaterMessageLog::sInstance->stopApplyingFilter();
			}
		}
		return TRUE;
	}
	for(S32 i = 0; i < 256; i++)
	{
		if(mIter == end)
		{
			mFinished = TRUE;
			if(LLFloaterMessageLog::sInstance)
			{
				if(LLFloaterMessageLog::sInstance->mMessageLogFilterApply == this)
				{
					LLFloaterMessageLog::sInstance->stopApplyingFilter();

					//we're done messing with the deque, push all queued items to the main deque
					std::deque<LLMessageLogEntry>::iterator queueIter = mQueuedMessages.begin();
					std::deque<LLMessageLogEntry>::iterator queueEnd = mQueuedMessages.end();

					while(queueIter != queueEnd)
					{
						LLFloaterMessageLog::sInstance->conditionalLog(LLFloaterMessageLogItem((*queueIter)));
						++queueIter;
					}

					mQueuedMessages.clear();
				}
			}

			return TRUE;
		}

		LLFloaterMessageLog::sInstance->conditionalLog(LLFloaterMessageLogItem((*mIter)));
		
		mIter++;
		mProgress++;
	}
	LLFloaterMessageLog::sInstance->updateFilterStatus();
	return FALSE;
}
// static
void LLFloaterMessageLog::onLog(LLMessageLogEntry entry)
{
	//don't mess with the queue while a filter's being applied, or face invalid iterators
	if(!sBusyApplyingFilter)
	{
		sMessageLogEntries.push_back(entry);
		conditionalLog(LLFloaterMessageLogItem(entry));
	}
}