summaryrefslogtreecommitdiff
path: root/src/3rdparty/squirrel
diff options
context:
space:
mode:
authoryexo <yexo@openttd.org>2009-06-01 22:00:47 +0000
committeryexo <yexo@openttd.org>2009-06-01 22:00:47 +0000
commit4ea3e511bd71559ab475f49292c8b50f1eace647 (patch)
tree0c088a58691406daaa43f51ebefe51a2337c4271 /src/3rdparty/squirrel
parent9b15b8cd4a6e956e97a6c5f823f181d381684157 (diff)
downloadopenttd-4ea3e511bd71559ab475f49292c8b50f1eace647.tar.xz
(svn r16502) -Fix [FS#2935]: when an AI was suspended while in a function called (indirectly) via call/acall/pcall OpenTTD crashed. Fix this by disallowing AIs to be suspended while called via call/acall/pcall.
IMPORTANT FOR AI WRITERS: AIs can no longer call any DoCommand functions (change anything, build vehicles, etc.) in a function called (indirectly) via call/acall/pcall. Where possible, please rewrite your code so it doesn't use call/acall/pcall
Diffstat (limited to 'src/3rdparty/squirrel')
-rw-r--r--src/3rdparty/squirrel/include/squirrel.h1
-rw-r--r--src/3rdparty/squirrel/squirrel/sqapi.cpp5
2 files changed, 6 insertions, 0 deletions
diff --git a/src/3rdparty/squirrel/include/squirrel.h b/src/3rdparty/squirrel/include/squirrel.h
index e611d0853..5623760fa 100644
--- a/src/3rdparty/squirrel/include/squirrel.h
+++ b/src/3rdparty/squirrel/include/squirrel.h
@@ -275,6 +275,7 @@ typedef struct tagSQRegFunction{
}SQRegFunction;
/*vm*/
+SQUIRREL_API bool sq_can_suspend(HSQUIRRELVM v);
SQUIRREL_API HSQUIRRELVM sq_open(SQInteger initialstacksize);
SQUIRREL_API HSQUIRRELVM sq_newthread(HSQUIRRELVM friendvm, SQInteger initialstacksize);
SQUIRREL_API void sq_seterrorhandler(HSQUIRRELVM v);
diff --git a/src/3rdparty/squirrel/squirrel/sqapi.cpp b/src/3rdparty/squirrel/squirrel/sqapi.cpp
index 10b3469f4..82527f4a7 100644
--- a/src/3rdparty/squirrel/squirrel/sqapi.cpp
+++ b/src/3rdparty/squirrel/squirrel/sqapi.cpp
@@ -90,6 +90,11 @@ SQInteger sq_getvmstate(HSQUIRRELVM v)
}
}
+bool sq_can_suspend(HSQUIRRELVM v)
+{
+ return v->_can_suspend;
+}
+
void sq_seterrorhandler(HSQUIRRELVM v)
{
SQObject o = stack_get(v, -1);