diff options
| -rw-r--r-- | indra/llcommon/llkeythrottle.h | 2 | ||||
| -rw-r--r-- | indra/llcommon/llversionserver.h | 4 | ||||
| -rw-r--r-- | indra/llmessage/lliosocket.cpp | 3 | ||||
| -rw-r--r-- | indra/lscript/lscript_execute.h | 45 | ||||
| -rw-r--r-- | indra/lscript/lscript_execute/lscript_execute.cpp | 73 | 
5 files changed, 74 insertions, 53 deletions
| diff --git a/indra/llcommon/llkeythrottle.h b/indra/llcommon/llkeythrottle.h index ac2f4254f2..7bbf2ad616 100644 --- a/indra/llcommon/llkeythrottle.h +++ b/indra/llcommon/llkeythrottle.h @@ -243,7 +243,7 @@ public:  	}  	// Set the throttling behavior -	void setParameters( U32 limit, F32 interval, BOOL realtime ) +	void setParameters( U32 limit, F32 interval, BOOL realtime = TRUE )  	{  		// limit is the maximum number of keys  		// allowed per interval (in seconds or frames) diff --git a/indra/llcommon/llversionserver.h b/indra/llcommon/llversionserver.h index fd5f6497c2..efd611090c 100644 --- a/indra/llcommon/llversionserver.h +++ b/indra/llcommon/llversionserver.h @@ -34,8 +34,8 @@  const S32 LL_VERSION_MAJOR = 1;  const S32 LL_VERSION_MINOR = 24; -const S32 LL_VERSION_PATCH = 0; -const S32 LL_VERSION_BUILD = 93453; +const S32 LL_VERSION_PATCH = 6; +const S32 LL_VERSION_BUILD = 0;  const char * const LL_CHANNEL = "Second Life Server"; diff --git a/indra/llmessage/lliosocket.cpp b/indra/llmessage/lliosocket.cpp index ad309434ac..5f756e9cc2 100644 --- a/indra/llmessage/lliosocket.cpp +++ b/indra/llmessage/lliosocket.cpp @@ -355,8 +355,11 @@ LLIOPipe::EStatus LLIOSocketReader::process_impl(  	}  	else if(APR_STATUS_IS_EAGAIN(status))  	{ +/*Commented out by Aura 9-9-8 for DEV-19961.  		// everything is fine, but we can terminate this process pump. +	  		rv = STATUS_BREAK; +*/  	}  	else  	{ diff --git a/indra/lscript/lscript_execute.h b/indra/lscript/lscript_execute.h index 271b53aae1..2f67e77c93 100644 --- a/indra/lscript/lscript_execute.h +++ b/indra/lscript/lscript_execute.h @@ -370,7 +370,7 @@ public:  	LLScriptExecute();  	virtual ~LLScriptExecute() {;} -	virtual S32 getVersion() = 0; +	virtual S32 getVersion() const = 0;  	virtual void deleteAllEvents() = 0;  	virtual void addEvent(LLScriptDataCollection* event) = 0;  	virtual U32 getEventCount() = 0; @@ -384,12 +384,12 @@ public:  	virtual void setSleep(F32 value) = 0;  	virtual F32 getEnergy() const = 0;  	virtual void setEnergy(F32 value) = 0; -	virtual U64 getCurrentEvents(S32 version) = 0; -	virtual void setCurrentEvents(U64 value, S32 version) = 0; -	virtual U64 getEventHandlers(S32 version) = 0; -	virtual void setEventHandlers(U64 value, S32 version) = 0; -	virtual U64 getCurrentHandler(S32 version) = 0; -	virtual void setCurrentHandler(U64 value, S32 version) = 0; +	virtual U64 getCurrentEvents() = 0; +	virtual void setCurrentEvents(U64 value) = 0; +	virtual U64 getEventHandlers() = 0; +	virtual void setEventHandlers(U64 value) = 0; +	virtual U64 getCurrentHandler() = 0; +	virtual void setCurrentHandler(U64 value) = 0;  	virtual BOOL isFinished() const = 0;  	virtual BOOL isStateChangePending() const = 0;  	virtual S32 writeState(U8 **dest, U32 header_size, U32 footer_size) = 0; // Allocate memory for header, state and footer return size of state. @@ -409,17 +409,17 @@ public:  	// Run handler for event for a maximum of time_slice seconds.  	// Updates current handler and current events registers. -	virtual void callEventHandler(LSCRIPTStateEventType event, S32 major_version, const LLUUID &id, F32 time_slice) = 0;; +	virtual void callEventHandler(LSCRIPTStateEventType event, const LLUUID &id, F32 time_slice) = 0;;  	// Run handler for next queued event for maximum of time_slice seconds.   	// Updates current handler and current events registers.  	// Removes processed event from queue. -	virtual void callNextQueuedEventHandler(U64 event_register, S32 major_version, const LLUUID &id, F32 time_slice) = 0; +	virtual void callNextQueuedEventHandler(U64 event_register, const LLUUID &id, F32 time_slice) = 0;  	// Run handler for event for a maximum of time_slice seconds.  	// Updates current handler and current events registers.  	// Removes processed event from queue. -	virtual void callQueuedEventHandler(LSCRIPTStateEventType event, S32 major_version, const LLUUID &id, F32 time_slice) = 0; +	virtual void callQueuedEventHandler(LSCRIPTStateEventType event, const LLUUID &id, F32 time_slice) = 0;  	// Switch to next state.  	// Returns new set of handled events. @@ -428,14 +428,14 @@ public:  	// Returns time taken.  	virtual F32 runQuanta(BOOL b_print, const LLUUID &id,  						  const char **errorstr,  -						  BOOL &state_transition, F32 quanta, +						  F32 quanta,  						  U32& events_processed, LLTimer& timer);  	// Run smallest possible amount of code: an instruction for LSL2, a segment  	// between save tests for Mono  	void runInstructions(BOOL b_print, const LLUUID &id,  						 const char **errorstr,  -						 BOOL &state_transition, U32& events_processed, +						 U32& events_processed,  						 F32 quanta);  	bool isYieldDue() const; @@ -461,7 +461,7 @@ public:  	LLScriptExecuteLSL2(const U8* bytecode, U32 bytecode_size);  	virtual ~LLScriptExecuteLSL2(); -	virtual S32 getVersion() {return get_register(mBuffer, LREG_VN);} +	virtual S32 getVersion() const {return get_register(mBuffer, LREG_VN);}  	virtual void deleteAllEvents() {mEventData.mEventDataList.deleteAllData();}  	virtual void addEvent(LLScriptDataCollection* event);  	virtual U32 getEventCount() {return mEventData.mEventDataList.getLength();} @@ -475,12 +475,12 @@ public:  	virtual void setSleep(F32 value);  	virtual F32 getEnergy() const;  	virtual void setEnergy(F32 value); -	virtual U64 getCurrentEvents(S32 version) {return get_event_register(mBuffer, LREG_CE, version);} -	virtual void setCurrentEvents(U64 value, S32 version) {return set_event_register(mBuffer, LREG_CE, value, version);} -	virtual U64 getEventHandlers(S32 version) {return get_event_register(mBuffer, LREG_ER, version);} -	virtual void setEventHandlers(U64 value, S32 version) {set_event_register(mBuffer, LREG_ER, value, version);} -	virtual U64 getCurrentHandler(S32 version); -	virtual void setCurrentHandler(U64 value, S32 version) {return set_event_register(mBuffer, LREG_IE, value, version);}	 +	virtual U64 getCurrentEvents() {return get_event_register(mBuffer, LREG_CE, getMajorVersion());} +	virtual void setCurrentEvents(U64 value) {return set_event_register(mBuffer, LREG_CE, value, getMajorVersion());} +	virtual U64 getEventHandlers() {return get_event_register(mBuffer, LREG_ER, getMajorVersion());} +	virtual void setEventHandlers(U64 value) {set_event_register(mBuffer, LREG_ER, value, getMajorVersion());} +	virtual U64 getCurrentHandler(); +	virtual void setCurrentHandler(U64 value) {return set_event_register(mBuffer, LREG_IE, value, getMajorVersion());}	  	virtual BOOL isFinished() const {return get_register(mBuffer, LREG_IP) == 0;}  	virtual BOOL isStateChangePending() const {return get_register(mBuffer, LREG_CS) != get_register(mBuffer, LREG_NS);}  	virtual S32 writeState(U8 **dest, U32 header_size, U32 footer_size); // Not including Events. @@ -500,17 +500,17 @@ public:  	// Run handler for event for a maximum of time_slice seconds.  	// Updates current handler and current events registers. -	virtual void callEventHandler(LSCRIPTStateEventType event, S32 major_version, const LLUUID &id, F32 time_slice); +	virtual void callEventHandler(LSCRIPTStateEventType event, const LLUUID &id, F32 time_slice);  	// Run handler for next queued event for maximum of time_slice seconds.   	// Updates current handler and current events registers.  	// Removes processed event from queue. -	virtual void callNextQueuedEventHandler(U64 event_register, S32 major_version, const LLUUID &id, F32 time_slice); +	virtual void callNextQueuedEventHandler(U64 event_register, const LLUUID &id, F32 time_slice);  	// Run handler for event for a maximum of time_slice seconds.  	// Updates current handler and current events registers.  	// Removes processed event from queue. -	virtual void callQueuedEventHandler(LSCRIPTStateEventType event, S32 major_version, const LLUUID &id, F32 time_slice); +	virtual void callQueuedEventHandler(LSCRIPTStateEventType event, const LLUUID &id, F32 time_slice);  	// Switch to next state.  	// Returns new set of handled events. @@ -527,6 +527,7 @@ public:  	U32						mBytecodeSize;  private: +	S32 getMajorVersion() const;  	void		recordBoundaryError( const LLUUID &id );  	void		setStateEventOpcoodeStartSafely( S32 state, LSCRIPTStateEventType event, const LLUUID &id ); diff --git a/indra/lscript/lscript_execute/lscript_execute.cpp b/indra/lscript/lscript_execute/lscript_execute.cpp index 6f1c2158d5..52e3af320c 100644 --- a/indra/lscript/lscript_execute/lscript_execute.cpp +++ b/indra/lscript/lscript_execute/lscript_execute.cpp @@ -330,8 +330,9 @@ void LLScriptExecuteLSL2::resumeEventHandler(BOOL b_print, const LLUUID &id, F32  	// NOTE: Babbage: all mExecuteFuncs return false.  } -void LLScriptExecuteLSL2::callEventHandler(LSCRIPTStateEventType event, S32 major_version, const LLUUID &id, F32 time_slice) +void LLScriptExecuteLSL2::callEventHandler(LSCRIPTStateEventType event, const LLUUID &id, F32 time_slice)  { +	S32 major_version = getMajorVersion();  	// push a zero to be popped  	lscript_push(mBuffer, 0);  	// push sp as current bp @@ -406,8 +407,9 @@ void LLScriptExecuteLSL2::callEventHandler(LSCRIPTStateEventType event, S32 majo  //	set_ip(mBuffer, opcode_start);  //} -void LLScriptExecuteLSL2::callQueuedEventHandler(LSCRIPTStateEventType event, S32 major_version, const LLUUID &id, F32 time_slice) +void LLScriptExecuteLSL2::callQueuedEventHandler(LSCRIPTStateEventType event, const LLUUID &id, F32 time_slice)  { +	S32 major_version = getMajorVersion();  	LLScriptDataCollection* eventdata;  	for (eventdata = mEventData.mEventDataList.getFirstData(); eventdata; eventdata = mEventData.mEventDataList.getNextData()) @@ -455,8 +457,9 @@ void LLScriptExecuteLSL2::callQueuedEventHandler(LSCRIPTStateEventType event, S3  	}  } -void LLScriptExecuteLSL2::callNextQueuedEventHandler(U64 event_register, S32 major_version, const LLUUID &id, F32 time_slice) +void LLScriptExecuteLSL2::callNextQueuedEventHandler(U64 event_register, const LLUUID &id, F32 time_slice)  { +	S32 major_version = getMajorVersion();  	LLScriptDataCollection* eventdata = mEventData.getNextEvent();  	if (eventdata)  	{ @@ -544,9 +547,9 @@ void LLScriptExecuteLSL2::setSleep(F32 value)  }  //virtual  -U64 LLScriptExecuteLSL2::getCurrentHandler(S32 version) +U64 LLScriptExecuteLSL2::getCurrentHandler()  { -	return get_event_register(mBuffer, LREG_IE, version); +	return get_event_register(mBuffer, LREG_IE, getMajorVersion());  }  //virtual  @@ -727,6 +730,20 @@ void LLScriptExecuteLSL2::reset()  	bytestream2bytestream(mBuffer, dest_offset, src, src_offset, size);  } +S32 LLScriptExecuteLSL2::getMajorVersion() const +{ +	S32 version = getVersion(); +	S32 major_version = 0; +	if (version == LSL2_VERSION1_END_NUMBER){ +		major_version = 1; +	} +	else if (version == LSL2_VERSION_NUMBER) +	{ +		major_version = 2; +	} +	return major_version; +} +  LLScriptExecute::LLScriptExecute() :  	mReset(FALSE)  { @@ -754,6 +771,10 @@ bool LLScriptExecute::isYieldDue() const  		return true;  	} +	// State changes can occur within a single time slice, +	// but LLScriptData's clean up is required. Yield here +	// to allow LLScriptData to perform cleanup and then call +	// runQuanta again.  	if(isStateChangePending())  	{  		return true; @@ -766,7 +787,6 @@ bool LLScriptExecute::isYieldDue() const  // a single instruction for LSL2, a segment between save tests for Mono  void LLScriptExecute::runInstructions(BOOL b_print, const LLUUID &id,   									 const char **errorstr,  -									 BOOL &state_transition,   									 U32& events_processed,  									 F32 quanta)  { @@ -809,17 +829,15 @@ void LLScriptExecute::runInstructions(BOOL b_print, const LLUUID &id,  	else  	{  		// make sure that IE is zero -		setCurrentHandler(0, major_version); +		setCurrentHandler(0);  		//	if no, we're in a state and waiting for an event -		U64 current_events = getCurrentEvents(major_version); -		U64 event_register = getEventHandlers(major_version); +		U64 current_events = getCurrentEvents(); +		U64 event_register = getEventHandlers();  		//	check NS to see if need to switch states (NS != CS)  		if (isStateChangePending())  		{ -			state_transition = TRUE; -  			// ok, blow away any pending events  			deleteAllEvents(); @@ -827,16 +845,16 @@ void LLScriptExecute::runInstructions(BOOL b_print, const LLUUID &id,  			if (current_events & LSCRIPTStateBitField[LSTT_STATE_EXIT])  			{  				// if yes, clear state exit flag -				setCurrentHandler(LSCRIPTStateBitField[LSTT_STATE_EXIT], major_version); +				setCurrentHandler(LSCRIPTStateBitField[LSTT_STATE_EXIT]);  				current_events &= ~LSCRIPTStateBitField[LSTT_STATE_EXIT]; -				setCurrentEvents(current_events, major_version); +				setCurrentEvents(current_events);  				// check state exit event handler  				// if there is a handler, call it  				if (event_register & LSCRIPTStateBitField[LSTT_STATE_EXIT])  				{  					++events_processed; -					callEventHandler(LSTT_STATE_EXIT, major_version, id, quanta); +					callEventHandler(LSTT_STATE_EXIT, id, quanta);  					return;  				}  			} @@ -844,32 +862,32 @@ void LLScriptExecute::runInstructions(BOOL b_print, const LLUUID &id,  			// if no handler or no state exit flag switch to new state  			// set state entry flag and clear other CE flags  			current_events = LSCRIPTStateBitField[LSTT_STATE_ENTRY]; -			setCurrentEvents(current_events, major_version); +			setCurrentEvents(current_events);  			U64 handled_events = nextState(); -			setEventHandlers(handled_events, major_version); +			setEventHandlers(handled_events);  		}  		// try to get next event from stack  		BOOL b_done = FALSE;  		LSCRIPTStateEventType event = LSTT_NULL; -		current_events = getCurrentEvents(major_version); -		event_register = getEventHandlers(major_version); +		current_events = getCurrentEvents(); +		event_register = getEventHandlers();  		// first, check to see if state_entry or onrez are raised and handled  		if ((current_events & LSCRIPTStateBitField[LSTT_STATE_ENTRY])  			&&(current_events & event_register))  		{  			++events_processed; -			callEventHandler(LSTT_STATE_ENTRY, major_version, id, quanta); +			callEventHandler(LSTT_STATE_ENTRY, id, quanta);  			b_done = TRUE;  		}  		else if ((current_events & LSCRIPTStateBitField[LSTT_REZ])  				 &&(current_events & event_register))  		{  			++events_processed; -			callQueuedEventHandler(LSTT_REZ, major_version, id, quanta); +			callQueuedEventHandler(LSTT_REZ, id, quanta);  			b_done = TRUE;  		} @@ -879,7 +897,7 @@ void LLScriptExecute::runInstructions(BOOL b_print, const LLUUID &id,  			if(getEventCount() > 0)  			{  				++events_processed; -				callNextQueuedEventHandler(event_register, major_version, id, quanta); +				callNextQueuedEventHandler(event_register, id, quanta);  				b_done = TRUE;  			}  			else @@ -890,7 +908,7 @@ void LLScriptExecute::runInstructions(BOOL b_print, const LLUUID &id,  				{  					event = return_first_event((S32)handled_current);  					++events_processed; -					callEventHandler(event, major_version, id, quanta); +					callEventHandler(event, id, quanta);  				}  				b_done = TRUE;  			} @@ -898,8 +916,8 @@ void LLScriptExecute::runInstructions(BOOL b_print, const LLUUID &id,  	}  } -// Run for a single timeslice, or until a yield is due -F32 LLScriptExecute::runQuanta(BOOL b_print, const LLUUID &id, const char **errorstr, BOOL &state_transition, F32 quanta, U32& events_processed, LLTimer& timer) +// Run for a single timeslice, or until a yield or state transition is due +F32 LLScriptExecute::runQuanta(BOOL b_print, const LLUUID &id, const char **errorstr, F32 quanta, U32& events_processed, LLTimer& timer)  {  	U32 timer_checks = 0;  	F32 inloop = 0; @@ -910,7 +928,7 @@ F32 LLScriptExecute::runQuanta(BOOL b_print, const LLUUID &id, const char **erro  	// on current execution speed.  	while(true)  	{ -		runInstructions(b_print, id, errorstr, state_transition,  +		runInstructions(b_print, id, errorstr,  						events_processed, quanta);  		static const S32 lsl_timer_check_skip = 4; @@ -3280,7 +3298,7 @@ BOOL run_state(U8 *buffer, S32 &offset, BOOL b_print, const LLUUID &id)  	{  		major_version = 2;  	} - +					  	S32 current_state = get_register(buffer, LREG_CS);  	if (state != current_state)  	{ @@ -3988,7 +4006,6 @@ void lscript_run(const std::string& filename, BOOL b_debug)  	LLTimer	timer;  	const char *error; -	BOOL b_state;  	LLScriptExecuteLSL2 *execute = NULL;  	if (filename.empty()) @@ -4012,7 +4029,7 @@ void lscript_run(const std::string& filename, BOOL b_debug)  		do {  			LLTimer timer2; -			execute->runQuanta(b_debug, LLUUID::null, &error, b_state,  +			execute->runQuanta(b_debug, LLUUID::null, &error,  							   time_slice, events_processed, timer2);  		} while (!execute->isFinished()); | 
