Merge branch '38-crash-ais-sur-stretch' into develop
This commit is contained in:
commit
d9ce1e074d
6 changed files with 633 additions and 11 deletions
|
@ -547,6 +547,8 @@ Linux client archlinux build:
|
||||||
- cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup
|
- cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup
|
||||||
- curl -o /etc/pacman.d/mirrorlist.new https://www.archlinux.org/mirrorlist/all/
|
- curl -o /etc/pacman.d/mirrorlist.new https://www.archlinux.org/mirrorlist/all/
|
||||||
- sed -i 's/^#Server/Server/' /etc/pacman.d/mirrorlist.new
|
- sed -i 's/^#Server/Server/' /etc/pacman.d/mirrorlist.new
|
||||||
|
- ls /usr/bin/*
|
||||||
|
- pacman -Syyu --noconfirm pacman-contrib
|
||||||
- rankmirrors -n 6 /etc/pacman.d/mirrorlist.new > /etc/pacman.d/mirrorlist
|
- rankmirrors -n 6 /etc/pacman.d/mirrorlist.new > /etc/pacman.d/mirrorlist
|
||||||
- pacman -Syyu
|
- pacman -Syyu
|
||||||
- pacman -S --noconfirm
|
- pacman -S --noconfirm
|
||||||
|
@ -626,6 +628,7 @@ Linux client archlinux build:
|
||||||
paths:
|
paths:
|
||||||
- code/build/bin
|
- code/build/bin
|
||||||
expire_in: 2 week
|
expire_in: 2 week
|
||||||
|
when: manual
|
||||||
|
|
||||||
# Gentoo Client
|
# Gentoo Client
|
||||||
|
|
||||||
|
|
84
patch/01_ryzom_ai_service_script_vm_crash_native_call.patch
Normal file
84
patch/01_ryzom_ai_service_script_vm_crash_native_call.patch
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
diff --git a/code/nel/include/nel/misc/smart_ptr.h b/code/nel/include/nel/misc/smart_ptr.h
|
||||||
|
index 2273cebeb..df80c7b77 100644
|
||||||
|
--- a/code/nel/include/nel/misc/smart_ptr.h
|
||||||
|
+++ b/code/nel/include/nel/misc/smart_ptr.h
|
||||||
|
@@ -495,6 +495,7 @@ public:
|
||||||
|
: _DbgCRefs(0)
|
||||||
|
, _DbgCCstRefs(0)
|
||||||
|
, _MaxRef(maxRef)
|
||||||
|
+ , _CheckOn(true)
|
||||||
|
, _FirstReference(NULL)
|
||||||
|
, _FirstCstReference(NULL)
|
||||||
|
{
|
||||||
|
diff --git a/code/ryzom/server/src/ai_service/script_vm.h b/code/ryzom/server/src/ai_service/script_vm.h
|
||||||
|
index bc6e56c15..0b931c63d 100644
|
||||||
|
--- a/code/ryzom/server/src/ai_service/script_vm.h
|
||||||
|
+++ b/code/ryzom/server/src/ai_service/script_vm.h
|
||||||
|
@@ -141,6 +141,8 @@ public:
|
||||||
|
union
|
||||||
|
{
|
||||||
|
int _vali;
|
||||||
|
+ float _valf;
|
||||||
|
+ std::string * _valsp;
|
||||||
|
uintptr_t _valp;
|
||||||
|
};
|
||||||
|
|
||||||
|
@@ -351,7 +353,7 @@ inline
|
||||||
|
CScriptStack::CStackEntry& CScriptStack::CStackEntry::operator=(float const& f)
|
||||||
|
{
|
||||||
|
clean();
|
||||||
|
- _vali = *((int*)&f);
|
||||||
|
+ _valf = f;
|
||||||
|
_type = EFloat;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
@@ -368,7 +370,7 @@ CScriptStack::CStackEntry& CScriptStack::CStackEntry::operator=(std::string cons
|
||||||
|
{
|
||||||
|
clean();
|
||||||
|
std::string* const strPt = new std::string(str);
|
||||||
|
- _valp = *((int*)&strPt);
|
||||||
|
+ _valsp = strPt;
|
||||||
|
_type = EString;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
@@ -376,7 +378,7 @@ inline
|
||||||
|
CScriptStack::CStackEntry& CScriptStack::CStackEntry::operator=(IScriptContext* sc)
|
||||||
|
{
|
||||||
|
clean();
|
||||||
|
- _valp = *((int*)&sc);
|
||||||
|
+ _valp = (uintptr_t) sc;
|
||||||
|
_type = EContext;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
@@ -484,13 +486,13 @@ inline
|
||||||
|
std::string& CScriptStack::CStackEntry::getString()
|
||||||
|
{
|
||||||
|
nlassert(_type==EString);
|
||||||
|
- return *(*((std::string**)&_valp));
|
||||||
|
+ return *( (std::string*) _valp);
|
||||||
|
}
|
||||||
|
inline
|
||||||
|
std::string const& CScriptStack::CStackEntry::getString() const
|
||||||
|
{
|
||||||
|
nlassert(_type==EString);
|
||||||
|
- return *(*((std::string**)&_valp));
|
||||||
|
+ return *_valsp;
|
||||||
|
}
|
||||||
|
inline
|
||||||
|
IScriptContext* CScriptStack::CStackEntry::getIScriptContext()
|
||||||
|
@@ -514,13 +516,13 @@ inline
|
||||||
|
float& CScriptStack::CStackEntry::getFloat()
|
||||||
|
{
|
||||||
|
nlassert(_type==EFloat);
|
||||||
|
- return *((float*)&_vali);
|
||||||
|
+ return _valf;
|
||||||
|
}
|
||||||
|
inline
|
||||||
|
float const& CScriptStack::CStackEntry::getFloat() const
|
||||||
|
{
|
||||||
|
nlassert(_type==EFloat);
|
||||||
|
- return *((float const*)&_vali);
|
||||||
|
+ return _valf;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
|
@ -1,10 +1,537 @@
|
||||||
--- code/ryzom/server/src/ai_service/script_vm.cpp.origin 2018-04-20 21:44:21.605504352 +0200
|
diff --git a/code/ryzom/server/src/ai_service/script_vm.cpp b/code/ryzom/server/src/ai_service/script_vm.cpp
|
||||||
+++ code/ryzom/server/src/ai_service/script_vm.cpp 2018-04-20 21:45:30.011307907 +0200
|
index 243110520..61d54988b 100644
|
||||||
@@ -919,6 +919,7 @@
|
--- a/code/ryzom/server/src/ai_service/script_vm.cpp
|
||||||
|
+++ b/code/ryzom/server/src/ai_service/script_vm.cpp
|
||||||
|
@@ -132,11 +132,13 @@ void CScriptVM::interpretCode(
|
||||||
|
size_t index = startIndex;
|
||||||
|
string currentString;
|
||||||
|
|
||||||
|
+ nldebug("interpretCode start - thisContext %lx", thisContext);
|
||||||
|
while (index < opcodes.size())
|
||||||
|
{
|
||||||
|
#if !FINAL_VERSION
|
||||||
|
EOpcode op = (EOpcode)opcodes[index];
|
||||||
|
#endif
|
||||||
|
+ nldebug("%d", opcodes[index]);
|
||||||
|
|
||||||
|
switch (opcodes[index])
|
||||||
|
{
|
||||||
|
@@ -146,9 +148,11 @@ void CScriptVM::interpretCode(
|
||||||
|
nlassert(false);
|
||||||
|
break;
|
||||||
|
case EOP:
|
||||||
|
+ nldebug("EOP");
|
||||||
|
return; // End Of Program
|
||||||
|
|
||||||
|
case EQ: // == Need: Value1: Value2 After: Value1==Value2 (Boolean as float)
|
||||||
|
+ nldebug("EQ");
|
||||||
|
{
|
||||||
|
const float res=stack.top(1)==stack.top()?1.f:0.f;
|
||||||
|
stack.pop();
|
||||||
|
@@ -157,6 +161,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case NEQ: // != Need: Value1: Value2 After: Value1!=Value2 (Boolean as float)
|
||||||
|
+ nldebug("NEQ");
|
||||||
|
{
|
||||||
|
const float res=stack.top(1)!=stack.top()?1.f:0.f;
|
||||||
|
stack.pop();
|
||||||
|
@@ -165,6 +170,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case INF: // < Need: Value1: Value2 After: Value1<Value2 (Boolean as float)
|
||||||
|
+ nldebug("INF");
|
||||||
|
{
|
||||||
|
const float res=stack.top(1)<stack.top()?1.f:0.f;
|
||||||
|
stack.pop();
|
||||||
|
@@ -173,6 +179,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case INFEQ: // <= Need: Value1: Value2 After: Value1<=Value2 (Boolean as float)
|
||||||
|
+ nldebug("INFEQ");
|
||||||
|
{
|
||||||
|
const float res=stack.top(1)<=stack.top()?1.f:0.f;
|
||||||
|
stack.pop();
|
||||||
|
@@ -181,6 +188,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case SUP: // > Need: Value1: Value2 After: Value1>Value2 (Boolean as float)
|
||||||
|
+ nldebug("SUP");
|
||||||
|
{
|
||||||
|
const float res=stack.top(1)>stack.top()?1.f:0.f;
|
||||||
|
stack.pop();
|
||||||
|
@@ -189,6 +197,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case SUPEQ: // >= Need: Value1: Value2 After: Value1>=Value2 (Boolean as float)
|
||||||
|
+ nldebug("SUPEQ");
|
||||||
|
{
|
||||||
|
const float res=stack.top(1)>=stack.top()?1.f:0.f;
|
||||||
|
stack.pop();
|
||||||
|
@@ -197,6 +206,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case ADD: // + Need: Value1: Value2 After: Value1+Value2
|
||||||
|
+ nldebug("ADD");
|
||||||
|
{
|
||||||
|
CScriptStack::CStackEntry &entry0=stack.top();
|
||||||
|
CScriptStack::CStackEntry &entry1=stack.top(1);
|
||||||
|
@@ -232,6 +242,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case SUB: // - Need: Value1: Value2 After: Value1-Value2
|
||||||
|
+ nldebug("SUB");
|
||||||
|
{
|
||||||
|
const float val=stack.top();
|
||||||
|
stack.pop();
|
||||||
|
@@ -240,6 +251,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case MUL: // * Need: Value1: Value2 After: Value1/Value2
|
||||||
|
+ nldebug("MUL");
|
||||||
|
{
|
||||||
|
float &res=stack.top(1);
|
||||||
|
res*=(float&)stack.top();
|
||||||
|
@@ -248,6 +260,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case DIV: // / Need: Value1: Value2 After: Value1/Value2 !Exception Gestion.
|
||||||
|
+ nldebug("DIV");
|
||||||
|
{
|
||||||
|
float &res=stack.top(1);
|
||||||
|
const float &divisor=stack.top();
|
||||||
|
@@ -260,6 +273,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case AND: // && Need: Value1: Value2 After: Value1&&Value2
|
||||||
|
+ nldebug("AND");
|
||||||
|
{
|
||||||
|
const bool val1=(float&)stack.top(1)!=0.f;
|
||||||
|
const bool val2=(float&)stack.top()!=0.f;
|
||||||
|
@@ -269,6 +283,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case OR: // || Need: Value1: Value2 After: Value1||Value2
|
||||||
|
+ nldebug("OR");
|
||||||
|
{
|
||||||
|
const bool val1=(float&)stack.top(1)!=0.f;
|
||||||
|
const bool val2=(float&)stack.top()!=0.f;
|
||||||
|
@@ -278,6 +293,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case NOT: // ! Need: Value After: !Value
|
||||||
|
+ nldebug("NOT");
|
||||||
|
{
|
||||||
|
float &val=stack.top();
|
||||||
|
val=(val==0.f)?1.f:0.f;
|
||||||
|
@@ -285,18 +301,21 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case PUSH_ON_STACK: // Set a Value (float) Need: - After: Value(float)
|
||||||
|
+ nldebug("PUSH_ON_STACK");
|
||||||
|
{
|
||||||
|
stack.push(*((float*)&opcodes[index+1]));
|
||||||
|
index+=2;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case POP: // Pop Need: ValToPop After: -
|
||||||
|
+ nldebug("POP");
|
||||||
|
{
|
||||||
|
stack.pop();
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case SET_VAR_VAL: // Set a Value to a Var. Need: VarName: VarValue After: -
|
||||||
|
+ nldebug("SET_VAR_VAL");
|
||||||
|
{
|
||||||
|
float f = 0.0f;
|
||||||
|
switch (stack.top().type())
|
||||||
|
@@ -321,6 +340,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case SET_STR_VAR_VAL: // Set a Value to a Var. Need: VarName: VarValue After: -
|
||||||
|
+ nldebug("SET_STR_VAR_VAL");
|
||||||
|
{
|
||||||
|
switch (stack.top().type())
|
||||||
|
{
|
||||||
|
@@ -344,6 +364,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case SET_CTX_VAR_VAL: // Set a Value to a Var. Need: VarName: VarValue After: -
|
||||||
|
+ nldebug("SET_CTX_VAR_VAL");
|
||||||
|
{
|
||||||
|
switch (stack.top().type())
|
||||||
|
{
|
||||||
|
@@ -361,6 +382,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case PUSH_VAR_VAL: // Push the Value of a Var. Need: - (VarName on next IP) After: VarValue(float)
|
||||||
|
+ nldebug("PUSH_VAR_VAL");
|
||||||
|
{
|
||||||
|
const float f=thisContext->getLogicVar(*((TStringId*)&opcodes[index+1]));
|
||||||
|
stack.push(f);
|
||||||
|
@@ -368,6 +390,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case PUSH_STR_VAR_VAL: // Push the Value of a Var. Need: - (VarName on next IP) After: VarValue(float)
|
||||||
|
+ nldebug("PUSH_STR_VAR_VAL");
|
||||||
|
{
|
||||||
|
std::string str = thisContext->getStrLogicVar(*((TStringId*)&opcodes[index+1]));
|
||||||
|
stack.push(str);
|
||||||
|
@@ -375,6 +398,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case PUSH_CTX_VAR_VAL: // Push the Value of a Var. Need: - (VarName on next IP) After: VarValue(float)
|
||||||
|
+ nldebug("PUSH_CTX_VAR_VAL");
|
||||||
|
{
|
||||||
|
IScriptContext* ctx = thisContext->getCtxLogicVar(*((TStringId*)&opcodes[index+1]));
|
||||||
|
stack.push(ctx);
|
||||||
|
@@ -581,6 +605,7 @@ void CScriptVM::interpretCode(
|
||||||
|
continue;
|
||||||
|
*/
|
||||||
|
case SET_CONTEXT_VAR_VAL:
|
||||||
|
+ nldebug("SET_CONTEXT_VAR_VAL");
|
||||||
|
{
|
||||||
|
IScriptContext* otherContext = (IScriptContext*)0;
|
||||||
|
switch (stack.top().type())
|
||||||
|
@@ -619,6 +644,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case SET_CONTEXT_STR_VAR_VAL:
|
||||||
|
+ nldebug("SET_CONTEXT_STR_VAR_VAL");
|
||||||
|
{
|
||||||
|
IScriptContext* otherContext = (IScriptContext*)0;
|
||||||
|
switch (stack.top().type())
|
||||||
|
@@ -657,6 +683,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case SET_CONTEXT_CTX_VAR_VAL:
|
||||||
|
+ nldebug("SET_CONTEXT_CTX_VAR_VAL");
|
||||||
|
{
|
||||||
|
IScriptContext* otherContext = (IScriptContext*)0;
|
||||||
|
switch (stack.top().type())
|
||||||
|
@@ -689,6 +716,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case PUSH_CONTEXT_VAR_VAL:
|
||||||
|
+ nldebug("PUSH_CONTEXT_VAR_VAL");
|
||||||
|
{
|
||||||
|
IScriptContext* otherContext = (IScriptContext*)0;
|
||||||
|
switch (stack.top().type())
|
||||||
|
@@ -714,6 +742,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case PUSH_CONTEXT_STR_VAR_VAL:
|
||||||
|
+ nldebug("PUSH_CONTEXT_STR_VAR_VAL");
|
||||||
|
{
|
||||||
|
IScriptContext* otherContext = (IScriptContext*)0;
|
||||||
|
switch (stack.top().type())
|
||||||
|
@@ -737,6 +766,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case PUSH_CONTEXT_CTX_VAR_VAL:
|
||||||
|
+ nldebug("PUSH_CONTEXT_CTX_VAR_VAL");
|
||||||
|
{
|
||||||
|
IScriptContext* otherContext = (IScriptContext*)0;
|
||||||
|
switch (stack.top().type())
|
||||||
|
@@ -760,11 +790,13 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case JUMP: // Jump + nb size_t to jump (relative). Need: NewJumpOffset After: -
|
||||||
|
+ nldebug("JUMP");
|
||||||
|
{
|
||||||
|
index+=opcodes[index+1]+1; // AGI .. Not Opt
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case JE: // Jump if last stack value is FALSE(==0). Need: BoolValue(float) (NewJumpOffset on Next Ip) After: -
|
||||||
|
+ nldebug("JE");
|
||||||
|
{
|
||||||
|
if ((float&)stack.top()==0.f)
|
||||||
|
index+=opcodes[index+1]+1; // AGI .. Not Opt
|
||||||
|
@@ -774,6 +806,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case JNE: // Jump if last stack value is TRUE(!=0). Need: BoolValue(float) (NewJumpOffset on Next Ip) After: -
|
||||||
|
+ nldebug("JNE");
|
||||||
|
{
|
||||||
|
if ((float&)stack.top()!=0.f)
|
||||||
|
index+=opcodes[index+1]+1; // AGI .. Not Opt
|
||||||
|
@@ -783,12 +816,14 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case PUSH_PRINT_STRING:
|
||||||
|
+ nldebug("PUSH_PRINT_STRING");
|
||||||
|
{
|
||||||
|
currentString+=CStringMapper::unmap(*((TStringId*)&opcodes[index+1])); // strPt.substr(1,strPt.size()-2);
|
||||||
|
index+=2;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case PUSH_PRINT_VAR:
|
||||||
|
+ nldebug("PUSH_PRINT_VAR");
|
||||||
|
{
|
||||||
|
float const val = thisContext->getLogicVar(*((TStringId*)&opcodes[index+1]));
|
||||||
|
currentString += NLMISC::toString("%g", val);
|
||||||
|
@@ -796,6 +831,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case PUSH_PRINT_STR_VAR:
|
||||||
|
+ nldebug("PUSH_PRINT_STR_VAR");
|
||||||
|
{
|
||||||
|
string const str = thisContext->getStrLogicVar(*((TStringId*)&opcodes[index+1]));
|
||||||
|
currentString += str;
|
||||||
|
@@ -803,6 +839,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case PRINT_STRING:
|
||||||
|
+ nldebug("PRINT_STRING");
|
||||||
|
{
|
||||||
|
if (AIScriptDisplayPrint)
|
||||||
|
{
|
||||||
|
@@ -813,6 +850,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case LOG_STRING:
|
||||||
|
+ nldebug("LOG_STRING");
|
||||||
|
{
|
||||||
|
if (AIScriptDisplayLog)
|
||||||
|
{
|
||||||
|
@@ -823,6 +861,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case FUNCTION:
|
||||||
|
+ nldebug("FUNCTION");
|
||||||
|
{
|
||||||
|
// on_event
|
||||||
|
TStringId const eventName = *((TStringId*)&opcodes[index+1]);
|
||||||
|
@@ -835,6 +874,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case CALL:
|
||||||
|
+ nldebug("CALL");
|
||||||
|
{
|
||||||
|
// set_event
|
||||||
|
const TStringId eventName=*((TStringId*)&opcodes[index+1]);
|
||||||
|
@@ -850,11 +890,13 @@ void CScriptVM::interpretCode(
|
||||||
|
case PUSH_THIS:
|
||||||
|
{
|
||||||
|
IScriptContext* const sc=thisContext;
|
||||||
|
+ nldebug("PUSH_THIS (%lx)", sc);
|
||||||
|
stack.push(sc);
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case PUSH_GROUP:
|
||||||
|
+ nldebug("PUSH_GROUP");
|
||||||
|
{
|
||||||
|
const TStringId strId=*((TStringId*)&opcodes[index+1]);
|
||||||
|
|
||||||
|
@@ -881,11 +923,13 @@ void CScriptVM::interpretCode(
|
||||||
|
case PUSH_STRING:
|
||||||
|
{
|
||||||
|
const string &str = CStringMapper::unmap(*((TStringId*)&opcodes[index+1]));
|
||||||
|
+ nldebug("PUSH_STRING (%s)", str.c_str());
|
||||||
|
stack.push(str);
|
||||||
|
index+=2;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case ASSIGN_FUNC_FROM:
|
||||||
|
+ nldebug("ASSIGN_FUNC_FROM");
|
||||||
|
{
|
||||||
|
const TStringId srcFunc=CStringMapper::map(stack.top());
|
||||||
|
stack.pop();
|
||||||
|
@@ -910,6 +954,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case NATIVE_CALL:
|
||||||
|
+ nldebug("NATIVE_CALL");
|
||||||
|
{
|
||||||
|
IScriptContext* const sc = stack.top();
|
||||||
|
stack.pop();
|
||||||
|
@@ -919,6 +964,7 @@ void CScriptVM::interpretCode(
|
||||||
string const& outParamsSig = CStringMapper::unmap(*((TStringId*)&opcodes[++index]));
|
string const& outParamsSig = CStringMapper::unmap(*((TStringId*)&opcodes[++index]));
|
||||||
if (sc)
|
if (sc)
|
||||||
{
|
{
|
||||||
+ nlinfo ("launch callNativeCallBack: funcName:%s mode:%d inParamsSig:'%s' outParamsSig:'%s'", funcName.c_str(), mode, inParamsSig.c_str(), outParamsSig.c_str());
|
+ nldebug ("launch callNativeCallBack: %lx funcName:%s mode:%d inParamsSig:'%s' outParamsSig:'%s'", sc, funcName.c_str(), mode, inParamsSig.c_str(), outParamsSig.c_str());
|
||||||
sc->callNativeCallBack(thisContext, funcName, mode, inParamsSig, outParamsSig, &stack);
|
sc->callNativeCallBack(thisContext, funcName, mode, inParamsSig, outParamsSig, &stack);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@@ -949,6 +995,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case RAND:
|
||||||
|
+ nldebug("RAND");
|
||||||
|
{
|
||||||
|
const size_t randIndex=rand32((uint32)opcodes[index+1]); // rand(RANDCOUNT)
|
||||||
|
index+=3; // pass RAND + RANDCOUNT + 1
|
||||||
|
@@ -960,12 +1007,14 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case RET:
|
||||||
|
+ nldebug("RET");
|
||||||
|
{
|
||||||
|
index=(int&)stack.top();
|
||||||
|
stack.pop();
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case ONCHILDREN:
|
||||||
|
+ nldebug("ONCHILDREN");
|
||||||
|
{
|
||||||
|
if (thisContext)
|
||||||
|
{
|
||||||
|
@@ -975,6 +1024,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case SWITCH:
|
||||||
|
+ nldebug("SWITCH");
|
||||||
|
{
|
||||||
|
// !!!!!
|
||||||
|
size_t compValue=0;
|
||||||
|
@@ -1027,6 +1077,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case INCR: // Increment top of stack.
|
||||||
|
+ nldebug("INCR");
|
||||||
|
{
|
||||||
|
float &f = stack.top();
|
||||||
|
++f;
|
||||||
|
@@ -1034,6 +1085,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case DECR: // Decrement top of stack.
|
||||||
|
+ nldebug("DECR");
|
||||||
|
{
|
||||||
|
float &f = stack.top();
|
||||||
|
--f;
|
||||||
|
@@ -1041,12 +1093,14 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case CONCAT: // Concatenates 2 strings
|
||||||
|
+ nldebug("CONCAT");
|
||||||
|
{
|
||||||
|
(string&)stack.top(1) += (string&)stack.top();
|
||||||
|
stack.pop();
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
case FTOS: // Convert a float to a string
|
||||||
|
+ nldebug("FTOS");
|
||||||
|
{
|
||||||
|
stack.top()=NLMISC::toString("%g", (float&)stack.top());
|
||||||
|
}
|
||||||
|
@@ -1054,6 +1108,7 @@ void CScriptVM::interpretCode(
|
||||||
|
}
|
||||||
|
nlassert(false); // must use continue !! Not implemented.
|
||||||
|
}
|
||||||
|
+ nldebug("interpretCode end");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
diff --git a/code/ryzom/server/src/ai_service/script_vm.h b/code/ryzom/server/src/ai_service/script_vm.h
|
||||||
|
index 0b931c63d..15a9f4121 100644
|
||||||
|
--- a/code/ryzom/server/src/ai_service/script_vm.h
|
||||||
|
+++ b/code/ryzom/server/src/ai_service/script_vm.h
|
||||||
|
@@ -21,6 +21,7 @@
|
||||||
|
//#include "ai_grp.h"
|
||||||
|
|
||||||
|
#include <limits>
|
||||||
|
+#include <nel/misc/debug.h>
|
||||||
|
|
||||||
|
namespace AIVM
|
||||||
|
{
|
||||||
|
@@ -310,6 +311,7 @@ inline
|
||||||
|
CByteCode::CByteCode(std::string const& sourceName)
|
||||||
|
: _sourceName(sourceName)
|
||||||
|
{
|
||||||
|
+ nldebug("[%lx]", this);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
@@ -334,17 +336,20 @@ inline
|
||||||
|
CScriptStack::CStackEntry::CStackEntry()
|
||||||
|
: _type(ENone)
|
||||||
|
{
|
||||||
|
+ nldebug("[%lx]", this);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
CScriptStack::CStackEntry::~CStackEntry()
|
||||||
|
{
|
||||||
|
+ nldebug("[%lx]", this);
|
||||||
|
clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
void CScriptStack::CStackEntry::clean()
|
||||||
|
{
|
||||||
|
+ nldebug("[%lx]", this);
|
||||||
|
if (_type==EString)
|
||||||
|
delete &getString();
|
||||||
|
}
|
||||||
|
@@ -352,6 +357,7 @@ void CScriptStack::CStackEntry::clean()
|
||||||
|
inline
|
||||||
|
CScriptStack::CStackEntry& CScriptStack::CStackEntry::operator=(float const& f)
|
||||||
|
{
|
||||||
|
+ nldebug("[%lx] float:'%f'", this, f);
|
||||||
|
clean();
|
||||||
|
_valf = f;
|
||||||
|
_type = EFloat;
|
||||||
|
@@ -360,6 +366,7 @@ CScriptStack::CStackEntry& CScriptStack::CStackEntry::operator=(float const& f)
|
||||||
|
inline
|
||||||
|
CScriptStack::CStackEntry& CScriptStack::CStackEntry::operator=(int const& i)
|
||||||
|
{
|
||||||
|
+ nldebug("[%lx] int:'%d'", this, i);
|
||||||
|
clean();
|
||||||
|
_vali = i;
|
||||||
|
_type = EOther;
|
||||||
|
@@ -368,6 +375,7 @@ CScriptStack::CStackEntry& CScriptStack::CStackEntry::operator=(int const& i)
|
||||||
|
inline
|
||||||
|
CScriptStack::CStackEntry& CScriptStack::CStackEntry::operator=(std::string const& str)
|
||||||
|
{
|
||||||
|
+ nldebug("[%lx] string:'%s'", this, str.c_str());
|
||||||
|
clean();
|
||||||
|
std::string* const strPt = new std::string(str);
|
||||||
|
_valsp = strPt;
|
||||||
|
@@ -377,6 +385,7 @@ CScriptStack::CStackEntry& CScriptStack::CStackEntry::operator=(std::string cons
|
||||||
|
inline
|
||||||
|
CScriptStack::CStackEntry& CScriptStack::CStackEntry::operator=(IScriptContext* sc)
|
||||||
|
{
|
||||||
|
+ nldebug("[%lx] IScriptContext:[%lx]", this, sc);
|
||||||
|
clean();
|
||||||
|
_valp = (uintptr_t) sc;
|
||||||
|
_type = EContext;
|
||||||
|
@@ -553,17 +562,20 @@ void CScriptStack::push(int val)
|
||||||
|
inline
|
||||||
|
CScriptStack::CStackEntry& CScriptStack::top() // is this an optimisation of the method below ?
|
||||||
|
{
|
||||||
|
+ nldebug("[%lx]", this);
|
||||||
|
return _Stack.back();
|
||||||
|
}
|
||||||
|
inline
|
||||||
|
CScriptStack::CStackEntry& CScriptStack::top(int index)
|
||||||
|
{
|
||||||
|
+ nldebug("[%lx] index:%d", this, index);
|
||||||
|
return *(_Stack.rbegin()+index);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
void CScriptStack::pop()
|
||||||
|
{
|
||||||
|
+ nldebug("[%lx]", this);
|
||||||
|
_Stack.pop_back();
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/code/ryzom/server/src/ai_service/state_instance.h b/code/ryzom/server/src/ai_service/state_instance.h
|
||||||
|
index 916b6bc47..d7de97f18 100644
|
||||||
|
--- a/code/ryzom/server/src/ai_service/state_instance.h
|
||||||
|
+++ b/code/ryzom/server/src/ai_service/state_instance.h
|
||||||
|
@@ -505,7 +505,10 @@ void CStateInstance::processStateEvent(CAIEvent const& stateEvent, CAIState cons
|
||||||
|
|
||||||
|
getDebugHistory()->addHistory("STATE: '%s' EVENT: '%s' REACTION: '%s'", state->getAliasNode()->fullName().c_str(),
|
||||||
|
stateEvent.getName().c_str(), reaction.getAliasNode()->fullName().c_str());
|
||||||
|
-
|
||||||
|
+ nldebug("STATE: '%s' EVENT: '%s' REACTION: '%s'",
|
||||||
|
+ state->getAliasNode()->fullName().c_str(),
|
||||||
|
+ stateEvent.getName().c_str(),
|
||||||
|
+ reaction.getAliasNode()->fullName().c_str());
|
||||||
|
foundReaction=true;
|
||||||
|
|
||||||
|
if (!reaction.getAction())
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
--- code/CMakeLists.txt.origin 2018-03-16 22:55:31.148698694 +0100
|
diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt
|
||||||
+++ code/CMakeLists.txt 2018-03-17 16:37:45.862885882 +0100
|
index 43054b63e..4e422c0b5 100644
|
||||||
@@ -440,6 +440,20 @@
|
--- a/code/CMakeLists.txt
|
||||||
|
+++ b/code/CMakeLists.txt
|
||||||
|
@@ -445,6 +445,20 @@ IF(WITH_NEL)
|
||||||
SET(CURL_LIBRARIES ${CURL_LIBRARIES} ${IDN_LIBRARY})
|
SET(CURL_LIBRARIES ${CURL_LIBRARIES} ${IDN_LIBRARY})
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
--- code/CMakeLists.txt.origin 2018-03-17 16:37:45.862885882 +0100
|
diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt
|
||||||
+++ code/CMakeLists.txt 2018-03-18 10:40:02.320751401 +0100
|
index 4e422c0b5..e76be35f1 100644
|
||||||
@@ -148,6 +148,17 @@
|
--- a/code/CMakeLists.txt
|
||||||
|
+++ b/code/CMakeLists.txt
|
||||||
|
@@ -153,6 +153,17 @@ IF(WITH_STATIC)
|
||||||
IF(LIBLZMA_LIBRARIES)
|
IF(LIBLZMA_LIBRARIES)
|
||||||
SET(LIBXML2_LIBRARIES ${LIBXML2_LIBRARIES} ${LIBLZMA_LIBRARIES})
|
SET(LIBXML2_LIBRARIES ${LIBXML2_LIBRARIES} ${LIBLZMA_LIBRARIES})
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
4
patch/series
Normal file
4
patch/series
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
libcrypto.patch
|
||||||
|
libicuuc.patch
|
||||||
|
01_ryzom_ai_service_script_vm_crash_native_call.patch
|
||||||
|
01_ryzom_debug_callNativeCallBack.patch
|
Loading…
Reference in a new issue