1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-08-11 17:51:04 +00:00

Properly handle mod-errors in on_shutdown

This commit is contained in:
Desour 2020-08-23 19:44:25 +02:00 committed by celeron55
parent 3e5bce2251
commit f27cf47779
3 changed files with 23 additions and 4 deletions

View file

@ -213,7 +213,8 @@ Server::Server(
bool simple_singleplayer_mode,
Address bind_addr,
bool dedicated,
ChatInterface *iface
ChatInterface *iface,
std::string *on_shutdown_errmsg
):
m_bind_addr(bind_addr),
m_path_world(path_world),
@ -232,6 +233,7 @@ Server::Server(
m_thread(new ServerThread(this)),
m_clients(m_con),
m_admin_chat(iface),
m_on_shutdown_errmsg(on_shutdown_errmsg),
m_modchannel_mgr(new ModChannelMgr())
{
if (m_path_world.empty())
@ -314,7 +316,18 @@ Server::~Server()
// Execute script shutdown hooks
infostream << "Executing shutdown hooks" << std::endl;
m_script->on_shutdown();
try {
m_script->on_shutdown();
} catch (ModError &e) {
errorstream << "ModError: " << e.what() << std::endl;
if (m_on_shutdown_errmsg) {
if (m_on_shutdown_errmsg->empty()) {
*m_on_shutdown_errmsg = std::string("ModError: ") + e.what();
} else {
*m_on_shutdown_errmsg += std::string("\nModError: ") + e.what();
}
}
}
infostream << "Server: Saving environment metadata" << std::endl;
m_env->saveMeta();