summaryrefslogtreecommitdiff
path: root/src/map.cpp
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2011-11-21 14:13:28 +0200
committerPerttu Ahola <celeron55@gmail.com>2011-11-29 19:13:50 +0200
commit941176cd65219afac81ea5bb2add425f69913142 (patch)
tree8a00dd634c6f35c1a134db9ec89a971a98b709fa /src/map.cpp
parent251b015210f55f028fdde8035928c7cf893fce75 (diff)
downloadminetest-941176cd65219afac81ea5bb2add425f69913142.tar.gz
minetest-941176cd65219afac81ea5bb2add425f69913142.tar.bz2
minetest-941176cd65219afac81ea5bb2add425f69913142.zip
Default to saving stuff more often to minimize lag caused by a single save
Diffstat (limited to 'src/map.cpp')
-rw-r--r--src/map.cpp16
1 files changed, 12 insertions, 4 deletions
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