mirror of
https://github.com/BeamMP/BeamMP-Server.git
synced 2026-10-25 13:30:43 +00:00
fix sol::error crash
This commit is contained in:
2 files changed
+10
-6
No files matched your search
@@ -34,6 +34,7 @@
|
|||||||
#include <queue>
|
#include <queue>
|
||||||
#include <random>
|
#include <random>
|
||||||
#include <set>
|
#include <set>
|
||||||
|
#include <sol/protected_function_result.hpp>
|
||||||
#include <toml.hpp>
|
#include <toml.hpp>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@@ -84,6 +85,11 @@ struct TLuaResult {
|
|||||||
std::make_shared<std::condition_variable>()
|
std::make_shared<std::condition_variable>()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void SetErrorMessageFromResult(sol::protected_function_result& Res) {
|
||||||
|
auto error = Res.get<std::optional<std::string>>();
|
||||||
|
ErrorMessage = error ? *error : "(unknown error; error object is not a string value)";
|
||||||
|
}
|
||||||
|
|
||||||
void MarkAsReady();
|
void MarkAsReady();
|
||||||
void WaitUntilReady();
|
void WaitUntilReady();
|
||||||
};
|
};
|
||||||
|
|||||||
+4
-6
@@ -550,8 +550,8 @@ sol::table TLuaEngine::StateThreadData::Lua_TriggerLocalEvent(const std::string&
|
|||||||
Result.set(i, FnRet);
|
Result.set(i, FnRet);
|
||||||
++i;
|
++i;
|
||||||
} else {
|
} else {
|
||||||
sol::error Err = FnRet;
|
auto ErrStr = FnRet.get<std::optional<std::string>>();
|
||||||
beammp_lua_error(std::string("TriggerLocalEvent: ") + Err.what());
|
beammp_lua_error(std::string("TriggerLocalEvent: ") + (ErrStr ? *ErrStr : "(unknown error; error object is not a string)"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1158,8 +1158,7 @@ void TLuaEngine::StateThreadData::operator()() {
|
|||||||
S.second->Result = std::move(Res);
|
S.second->Result = std::move(Res);
|
||||||
} else {
|
} else {
|
||||||
S.second->Error = true;
|
S.second->Error = true;
|
||||||
sol::error Err = Res;
|
S.second->SetErrorMessageFromResult(Res);
|
||||||
S.second->ErrorMessage = Err.what();
|
|
||||||
}
|
}
|
||||||
S.second->MarkAsReady();
|
S.second->MarkAsReady();
|
||||||
}
|
}
|
||||||
@@ -1222,8 +1221,7 @@ void TLuaEngine::StateThreadData::operator()() {
|
|||||||
Result->Result = std::move(Res);
|
Result->Result = std::move(Res);
|
||||||
} else {
|
} else {
|
||||||
Result->Error = true;
|
Result->Error = true;
|
||||||
sol::error Err = Res;
|
Result->SetErrorMessageFromResult(Res);
|
||||||
Result->ErrorMessage = Err.what();
|
|
||||||
}
|
}
|
||||||
Result->MarkAsReady();
|
Result->MarkAsReady();
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in new issue
Block a user