Commit Graph

25 Commits

Author SHA1 Message Date
Geoff Crossland
963b19c599 Fix a few chunk saving race conditions
* ChunkRegionLoader.c() picks an entry in the save queue, removes that entry from the save queue and then actually writes the entry to the region file. So, between the last two steps, the entry is neither in the save queue nor is it in the region file; if somebody loads the chunk again (with ChunkRegionLoader.loadChunk()) in that gap, they'll get old data. I've delayed the removal until the saving is done.
* ChunkRegionLoader.c() also records the coords of the chunks it's currently saving in this.c. ChunkRegionLoader.a(ChunkCoordIntPair, NBTTagCompound), which adds an entry to the save queue, stops the addition of an entry if its coords are in this.c. Now, I'm guessing that Mojang's intended purpose for this mechanism was to prevent multiple parallel writes for the same chunk. The "stops the addition" bit above should then be something like "block until it's no longer in c"; in fact, the vanilla implementation is "discard the new state of the chunk". I've taken the easy route to solving this, by just making ChunkRegionLoader.c() synchronized (since, in normal use, only the chunk saving thread is in here).
2017-08-11 17:34:19 +10:00
md_5
bb4ae3b3b8 Update to Minecraft 1.12 2017-06-08 18:00:00 +10:00
md_5
5195487ec6 Update to Minecraft 1.12-pre2 2017-05-14 12:00:00 +10:00
Geoff Crossland
6194f6cc49 Drop RegionFile.chunkExists() in favour of Mojang's own version 2017-04-27 21:25:33 +10:00
md_5
c25ddf063a Update to Minecraft 1.11 2016-11-17 12:41:03 +11:00
md_5
43ab2669d7 SPIGOT-2634: Concurrency issue in FileIOThread 2016-08-27 15:51:54 +10:00
Jadon Fowler
63839165bc
Fix infinite loop when saving chunks
Running `/save-all flush` would start an infinite loop that prints:
    ThreadedAnvilChunkStorage (world): All chunks are saved
2016-06-18 04:31:44 -07:00
md_5
7f1a32252b SPIGOT-2385: RegionFileCache synchronization issues 2016-06-12 19:28:27 +10:00
md_5
a8a4bedd2a Update to Minecraft 1.10 2016-06-09 11:43:49 +10:00
md_5
c5e9a169fa Minecraft 1.9.4 2016-05-10 21:47:39 +10:00
md_5
aa008dff0f Update to Minecraft 1.9 2016-03-01 09:32:45 +11:00
md_5
de5c26123f Update to Minecraft 1.8.8 (Pre-)Release. 2015-07-27 22:21:53 +10:00
md_5
d63abf6cf1 Cut fluff from patch headers. 2015-05-25 20:37:24 +10:00
Thinkofdeath
a486600749 Update to 1.8.4 2015-05-17 10:32:59 +01:00
Thinkofdeath
3fce0ec0f5 SPIGOT-729: Revert the entity slice move 2015-03-22 19:01:30 +00:00
Thinkofdeath
30d751b362 Move the entity slice loading 2015-03-16 19:44:51 +00:00
Thinkofdeath
d8a9c7be42 Update to Minecraft 1.8.3 2015-03-04 09:48:58 +00:00
Thinkofdeath
cef65526d4 Optimize the invalid block fixing 2014-11-29 23:25:17 +00:00
Thinkofdeath
dd096a5255 Improve the invalid block handling 2014-11-29 20:00:52 +00:00
Thinkofdeath
fdfadd23d0 Fix a vanilla issue which causes invalid data values on blocks to turn to air
Worlds already loaded in 1.8 can still be saved by this but tile entities will
be lost
2014-11-29 17:31:40 +00:00
Thinkofdeath
90ac03522a Revert "Remove patch headers"
This reverts commit d6e3dff7d8.
2014-11-28 23:02:15 +00:00
GunfighterJ
d6e3dff7d8 Remove patch headers 2014-11-28 16:54:14 -06:00
Thinkofdeath
2abdb9a061 Use the right name for the AsyncPlayerPreLoginEvent 2014-11-28 17:43:48 +00:00
Thinkofdeath
669c44cb3c Fix eating food whilst not facing a block 2014-11-28 11:23:19 +00:00
Thinkofdeath
24557bc2b3 Update to Minecraft 1.8
For more information please see http://www.spigotmc.org/
2014-11-28 17:16:30 +11:00