diff options
author | Matthew I <matttpt@gmail.com> | 2012-09-08 14:44:26 -0400 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2012-11-30 19:26:51 +0200 |
commit | 6c8fa83ecd3f40a8e2fec890caaaa955f9d4255c (patch) | |
tree | 6bf4d32fc0f9ad1d22ac1d76f5a447bf7d6c58e4 /src | |
parent | ab45133ab4826359ca9a5ed50b68150eb462c8ef (diff) | |
download | minetest-6c8fa83ecd3f40a8e2fec890caaaa955f9d4255c.tar.gz minetest-6c8fa83ecd3f40a8e2fec890caaaa955f9d4255c.tar.bz2 minetest-6c8fa83ecd3f40a8e2fec890caaaa955f9d4255c.zip |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/scriptapi.cpp | 13 | ||||
-rw-r--r-- | src/scriptapi.h | 3 | ||||
-rw-r--r-- | src/server.cpp | 5 |
3 files changed, 21 insertions, 0 deletions
diff --git a/src/scriptapi.cpp b/src/scriptapi.cpp index 91100d311..e5815c462 100644 --- a/src/scriptapi.cpp +++ b/src/scriptapi.cpp @@ -5576,6 +5576,19 @@ bool scriptapi_on_chat_message(lua_State *L, const std::string &name, 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) { realitycheck(L); diff --git a/src/scriptapi.h b/src/scriptapi.h index 144cb3bc6..d71b8fe41 100644 --- a/src/scriptapi.h +++ b/src/scriptapi.h @@ -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, u32 blockseed); +/* server */ +void scriptapi_on_shutdown(lua_State *L); + /* misc */ void scriptapi_on_newplayer(lua_State *L, ServerActiveObject *player); void scriptapi_on_dieplayer(lua_State *L, ServerActiveObject *player); diff --git a/src/server.cpp b/src/server.cpp index 961bdeaf9..67c1ce927 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1112,6 +1112,11 @@ Server::~Server() {} } } + + /* + Execute script shutdown hooks + */ + scriptapi_on_shutdown(m_lua); { JMutexAutoLock envlock(m_env_mutex); |