Fix love.threaderror when the error message is empty.

Fixes #1775
This commit is contained in:
Alex Szpakowski
2022-04-15 23:31:57 -03:00
parent c35356c841
commit e512eff37b
3 changed files with 20 additions and 8 deletions
+15 -4
View File
@@ -36,6 +36,7 @@ love::Type LuaThread::type("Thread", &Threadable::type);
LuaThread::LuaThread(const std::string &name, love::Data *code)
: code(code)
, name(name)
, haserror(false)
{
threadName = name;
}
@@ -47,6 +48,7 @@ LuaThread::~LuaThread()
void LuaThread::threadFunction()
{
error.clear();
haserror = false;
lua_State *L = luaL_newstate();
luaL_openlibs(L);
@@ -70,7 +72,10 @@ void LuaThread::threadFunction()
int tracebackidx = lua_gettop(L);
if (luaL_loadbuffer(L, (const char *) code->getData(), code->getSize(), name.c_str()) != 0)
{
error = luax_tostring(L, -1);
haserror = true;
}
else
{
int pushedargs = (int) args.size();
@@ -81,18 +86,27 @@ void LuaThread::threadFunction()
args.clear();
if (lua_pcall(L, pushedargs, 0, tracebackidx) != 0)
{
error = luax_tostring(L, -1);
haserror = true;
}
}
lua_close(L);
if (!error.empty())
if (haserror)
onError();
}
bool LuaThread::start(const std::vector<Variant> &args)
{
if (isRunning())
return false;
this->args = args;
error.clear();
haserror = false;
return Threadable::start();
}
@@ -103,9 +117,6 @@ const std::string &LuaThread::getError() const
void LuaThread::onError()
{
if (error.empty())
return;
auto eventmodule = Module::getInstance<event::Event>(Module::M_EVENT);
if (!eventmodule)
return;
+2
View File
@@ -46,6 +46,7 @@ public:
virtual ~LuaThread();
void threadFunction();
const std::string &getError() const;
bool hasError() const { return haserror; }
bool start(const std::vector<Variant> &args);
@@ -56,6 +57,7 @@ private:
StrongRef<love::Data> code;
std::string name;
std::string error;
bool haserror;
std::vector<Variant> args;
+3 -4
View File
@@ -63,11 +63,10 @@ int w_Thread_wait(lua_State *L)
int w_Thread_getError(lua_State *L)
{
LuaThread *t = luax_checkthread(L, 1);
std::string err = t->getError();
if (err.empty())
lua_pushnil(L);
if (t->hasError())
luax_pushstring(L, t->getError());
else
luax_pushstring(L, err);
lua_pushnil(L);
return 1;
}