Add shutdown hook interface to Lua API
Scripts can call minetest.register_on_shutdown() to register a shutdown hook. Document that minetest.register_on_shutdown() callbacks may not be run If the server crashes, it is unlikely that callbacks registered using minetest.register_on_shutdown() will be called.
This commit is contained in:
parent
ab45133ab4
commit
6c8fa83ecd
|
@ -303,6 +303,7 @@ end
|
||||||
|
|
||||||
minetest.registered_on_chat_messages, minetest.register_on_chat_message = make_registration()
|
minetest.registered_on_chat_messages, minetest.register_on_chat_message = make_registration()
|
||||||
minetest.registered_globalsteps, minetest.register_globalstep = make_registration()
|
minetest.registered_globalsteps, minetest.register_globalstep = make_registration()
|
||||||
|
minetest.registered_on_shutdown, minetest.register_on_shutdown = make_registration()
|
||||||
minetest.registered_on_punchnodes, minetest.register_on_punchnode = make_registration()
|
minetest.registered_on_punchnodes, minetest.register_on_punchnode = make_registration()
|
||||||
minetest.registered_on_placenodes, minetest.register_on_placenode = make_registration()
|
minetest.registered_on_placenodes, minetest.register_on_placenode = make_registration()
|
||||||
minetest.registered_on_dignodes, minetest.register_on_dignode = make_registration()
|
minetest.registered_on_dignodes, minetest.register_on_dignode = make_registration()
|
||||||
|
|
|
@ -792,6 +792,11 @@ minetest.register_craft(recipe)
|
||||||
Global callback registration functions: (Call these only at load time)
|
Global callback registration functions: (Call these only at load time)
|
||||||
minetest.register_globalstep(func(dtime))
|
minetest.register_globalstep(func(dtime))
|
||||||
^ Called every server step, usually interval of 0.05s
|
^ Called every server step, usually interval of 0.05s
|
||||||
|
minetest.register_on_shutdown(func())
|
||||||
|
^ Called before server shutdown
|
||||||
|
^ WARNING: If the server terminates abnormally (i.e. crashes), the registered
|
||||||
|
callbacks WILL LIKELY NOT BE RUN. Data should be saved at
|
||||||
|
semi-frequent intervals as well as on server shutdown.
|
||||||
minetest.register_on_placenode(func(pos, newnode, placer, oldnode))
|
minetest.register_on_placenode(func(pos, newnode, placer, oldnode))
|
||||||
^ Called when a node has been placed
|
^ Called when a node has been placed
|
||||||
^ Deprecated: Use on_construct or after_place_node in node definition instead
|
^ Deprecated: Use on_construct or after_place_node in node definition instead
|
||||||
|
|
|
@ -5576,6 +5576,19 @@ bool scriptapi_on_chat_message(lua_State *L, const std::string &name,
|
||||||
return ate;
|
return ate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void scriptapi_on_shutdown(lua_State *L)
|
||||||
|
{
|
||||||
|
realitycheck(L);
|
||||||
|
assert(lua_checkstack(L, 20));
|
||||||
|
StackUnroller stack_unroller(L);
|
||||||
|
|
||||||
|
// Get registered shutdown hooks
|
||||||
|
lua_getglobal(L, "minetest");
|
||||||
|
lua_getfield(L, -1, "registered_on_shutdown");
|
||||||
|
// Call callbacks
|
||||||
|
scriptapi_run_callbacks(L, 0, RUN_CALLBACKS_MODE_FIRST);
|
||||||
|
}
|
||||||
|
|
||||||
void scriptapi_on_newplayer(lua_State *L, ServerActiveObject *player)
|
void scriptapi_on_newplayer(lua_State *L, ServerActiveObject *player)
|
||||||
{
|
{
|
||||||
realitycheck(L);
|
realitycheck(L);
|
||||||
|
|
|
@ -55,6 +55,9 @@ void scriptapi_environment_step(lua_State *L, float dtime);
|
||||||
void scriptapi_environment_on_generated(lua_State *L, v3s16 minp, v3s16 maxp,
|
void scriptapi_environment_on_generated(lua_State *L, v3s16 minp, v3s16 maxp,
|
||||||
u32 blockseed);
|
u32 blockseed);
|
||||||
|
|
||||||
|
/* server */
|
||||||
|
void scriptapi_on_shutdown(lua_State *L);
|
||||||
|
|
||||||
/* misc */
|
/* misc */
|
||||||
void scriptapi_on_newplayer(lua_State *L, ServerActiveObject *player);
|
void scriptapi_on_newplayer(lua_State *L, ServerActiveObject *player);
|
||||||
void scriptapi_on_dieplayer(lua_State *L, ServerActiveObject *player);
|
void scriptapi_on_dieplayer(lua_State *L, ServerActiveObject *player);
|
||||||
|
|
|
@ -1113,6 +1113,11 @@ Server::~Server()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Execute script shutdown hooks
|
||||||
|
*/
|
||||||
|
scriptapi_on_shutdown(m_lua);
|
||||||
|
|
||||||
{
|
{
|
||||||
JMutexAutoLock envlock(m_env_mutex);
|
JMutexAutoLock envlock(m_env_mutex);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue