diff options
author | Perttu Ahola <celeron55@gmail.com> | 2011-11-21 14:13:28 +0200 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2011-11-29 19:13:50 +0200 |
commit | 941176cd65219afac81ea5bb2add425f69913142 (patch) | |
tree | 8a00dd634c6f35c1a134db9ec89a971a98b709fa | |
parent | 251b015210f55f028fdde8035928c7cf893fce75 (diff) | |
download | minetest-941176cd65219afac81ea5bb2add425f69913142.tar.gz minetest-941176cd65219afac81ea5bb2add425f69913142.tar.bz2 minetest-941176cd65219afac81ea5bb2add425f69913142.zip |
Default to saving stuff more often to minimize lag caused by a single save
-rw-r--r-- | src/defaultsettings.cpp | 4 | ||||
-rw-r--r-- | src/map.cpp | 16 | ||||
-rw-r--r-- | src/server.cpp | 2 |
3 files changed, 15 insertions, 7 deletions
diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 2cb69b116..20a6dc0a8 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -106,8 +106,8 @@ void set_default_settings(Settings *settings) settings->setDefault("max_block_generate_distance", "5"); settings->setDefault("time_send_interval", "20"); settings->setDefault("time_speed", "96"); - settings->setDefault("server_unload_unused_data_timeout", "60"); - settings->setDefault("server_map_save_interval", "10"); + settings->setDefault("server_unload_unused_data_timeout", "19"); + settings->setDefault("server_map_save_interval", "1.238"); settings->setDefault("full_block_send_enable_min_time_from_building", "2.0"); settings->setDefault("enable_experimental", "false"); } diff --git a/src/map.cpp b/src/map.cpp index 13f2a0e98..7d5bd700d 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -2836,7 +2836,9 @@ void ServerMap::save(bool only_changed) u32 block_count = 0; u32 block_count_all = 0; // Number of blocks in memory - beginSave(); + // Don't do anything with sqlite unless something is really saved + bool save_started = false; + core::map<v2s16, MapSector*>::Iterator i = m_sectors.getIterator(); for(; i.atEnd() == false; i++) { @@ -2852,7 +2854,6 @@ void ServerMap::save(bool only_changed) sector->getBlocks(blocks); core::list<MapBlock*>::Iterator j; - //sqlite3_exec(m_database, "BEGIN;", NULL, NULL, NULL); for(j=blocks.begin(); j!=blocks.end(); j++) { MapBlock *block = *j; @@ -2862,7 +2863,14 @@ void ServerMap::save(bool only_changed) if(block->getModified() >= MOD_STATE_WRITE_NEEDED || only_changed == false) { + // Lazy beginSave() + if(!save_started){ + beginSave(); + save_started = true; + } + modprofiler.add(block->getModifiedReason(), 1); + saveBlock(block); block_count++; @@ -2872,10 +2880,10 @@ void ServerMap::save(bool only_changed) <<block->getPos().Z<<")" <<std::endl;*/ } - //sqlite3_exec(m_database, "COMMIT;", NULL, NULL, NULL); } } - endSave(); + if(save_started) + endSave(); /* Only print if something happened or saved whole map diff --git a/src/server.cpp b/src/server.cpp index 207f35dcb..dd4a93c78 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1300,7 +1300,7 @@ void Server::AsyncRunStep() m_env->step(dtime); } - const float map_timer_and_unload_dtime = 5.15; + const float map_timer_and_unload_dtime = 2.92; if(m_map_timer_and_unload_interval.step(dtime, map_timer_and_unload_dtime)) { JMutexAutoLock lock(m_env_mutex); |