Yengine: only retry compile if there was a object file in cache with wrong version or signature

httptests
UbitUmarov 2018-03-09 22:44:58 +00:00
parent 2dc49dc1e9
commit 2369ce413d
4 changed files with 6 additions and 18 deletions

View File

@ -6540,14 +6540,8 @@ namespace OpenSim.Region.ScriptEngine.Yengine
public class CVVMismatchException: Exception public class CVVMismatchException: Exception
{ {
public int oldcvv; public CVVMismatchException(string msg) : base(msg)
public int newcvv;
public CVVMismatchException(int oldcvv, int newcvv) : base("object version is " + oldcvv.ToString() +
" but accept only " + newcvv.ToString())
{ {
this.oldcvv = oldcvv;
this.newcvv = newcvv;
} }
} }
} }

View File

@ -124,13 +124,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine
finally finally
{ {
// In case something went wrong writing temp file, delete it. // In case something went wrong writing temp file, delete it.
try File.Delete (tmpFileName);
{
File.Delete (tmpFileName);
}
catch
{
}
} }
// Since we just wrote the .xmrobj file, maybe save disassembly. // Since we just wrote the .xmrobj file, maybe save disassembly.

View File

@ -90,12 +90,12 @@ namespace OpenSim.Region.ScriptEngine.Yengine
// Check version number to make sure we know how to process file contents. // Check version number to make sure we know how to process file contents.
char[] ocm = objFileReader.ReadChars(ScriptCodeGen.OBJECT_CODE_MAGIC.Length); char[] ocm = objFileReader.ReadChars(ScriptCodeGen.OBJECT_CODE_MAGIC.Length);
if(new String(ocm) != ScriptCodeGen.OBJECT_CODE_MAGIC) if(new String(ocm) != ScriptCodeGen.OBJECT_CODE_MAGIC)
throw new Exception("not an Yengine object file (bad magic)"); throw new CVVMismatchException("Not an Yengine object file (bad magic)");
int cvv = objFileReader.ReadInt32(); int cvv = objFileReader.ReadInt32();
if(cvv != ScriptCodeGen.COMPILED_VERSION_VALUE) if(cvv != ScriptCodeGen.COMPILED_VERSION_VALUE)
throw new CVVMismatchException(cvv, ScriptCodeGen.COMPILED_VERSION_VALUE); throw new CVVMismatchException(
"Object version is " + cvv.ToString() + " but accept only " + ScriptCodeGen.COMPILED_VERSION_VALUE.ToString());
// Fill in simple parts of scriptObjCode object. // Fill in simple parts of scriptObjCode object.
sourceHash = objFileReader.ReadString(); sourceHash = objFileReader.ReadString();
glblSizes.ReadFromFile(objFileReader); glblSizes.ReadFromFile(objFileReader);

View File

@ -1283,7 +1283,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine
{ {
initerr = e1; initerr = e1;
} }
if((initerr != null) && !instance.m_ForceRecomp) if(initerr != null && !instance.m_ForceRecomp && initerr is CVVMismatchException)
{ {
UUID itemID = instance.m_ItemID; UUID itemID = instance.m_ItemID;
Verbose("[YEngine]: {0}/{2} first load failed ({1}), retrying after recompile", Verbose("[YEngine]: {0}/{2} first load failed ({1}), retrying after recompile",