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::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::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) <getPos().Z<<")" <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);