Merge branch '38-crash-ais-sur-stretch' into develop

This commit is contained in:
Deed 2018-06-11 22:41:38 +02:00
commit d9ce1e074d
6 changed files with 633 additions and 11 deletions

View file

@ -547,6 +547,8 @@ Linux client archlinux build:
- cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup
- curl -o /etc/pacman.d/mirrorlist.new https://www.archlinux.org/mirrorlist/all/
- 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
- pacman -Syyu
- pacman -S --noconfirm
@ -626,6 +628,7 @@ Linux client archlinux build:
paths:
- code/build/bin
expire_in: 2 week
when: manual
# Gentoo Client

View 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

View file

@ -1,10 +1,537 @@
--- code/ryzom/server/src/ai_service/script_vm.cpp.origin 2018-04-20 21:44:21.605504352 +0200
+++ code/ryzom/server/src/ai_service/script_vm.cpp 2018-04-20 21:45:30.011307907 +0200
@@ -919,6 +919,7 @@
diff --git a/code/ryzom/server/src/ai_service/script_vm.cpp b/code/ryzom/server/src/ai_service/script_vm.cpp
index 243110520..61d54988b 100644
--- 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]));
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);
}
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())

View file

@ -1,6 +1,8 @@
--- code/CMakeLists.txt.origin 2018-03-16 22:55:31.148698694 +0100
+++ code/CMakeLists.txt 2018-03-17 16:37:45.862885882 +0100
@@ -440,6 +440,20 @@
diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt
index 43054b63e..4e422c0b5 100644
--- a/code/CMakeLists.txt
+++ b/code/CMakeLists.txt
@@ -445,6 +445,20 @@ IF(WITH_NEL)
SET(CURL_LIBRARIES ${CURL_LIBRARIES} ${IDN_LIBRARY})
ENDIF()

View file

@ -1,6 +1,8 @@
--- code/CMakeLists.txt.origin 2018-03-17 16:37:45.862885882 +0100
+++ code/CMakeLists.txt 2018-03-18 10:40:02.320751401 +0100
@@ -148,6 +148,17 @@
diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt
index 4e422c0b5..e76be35f1 100644
--- a/code/CMakeLists.txt
+++ b/code/CMakeLists.txt
@@ -153,6 +153,17 @@ IF(WITH_STATIC)
IF(LIBLZMA_LIBRARIES)
SET(LIBXML2_LIBRARIES ${LIBXML2_LIBRARIES} ${LIBLZMA_LIBRARIES})
ENDIF()

4
patch/series Normal file
View file

@ -0,0 +1,4 @@
libcrypto.patch
libicuuc.patch
01_ryzom_ai_service_script_vm_crash_native_call.patch
01_ryzom_debug_callNativeCallBack.patch