mirror of
https://github.com/PaperMC/Paper.git
synced 2025-08-01 04:32:11 -07:00
Note: This cannot happen on the Fabric/NeoForge versions since async ticket level processing is not allowed, but can happen on Paper. This change is made here so that Paper can remain in sync. Ticket level decreases may be handled asynchronously when the off-thread invokes processTicketUpdates() when the main thread is running ChunkHolderManager#tick(). This is because the ticket update is queued during tick(), but not executed (invoking processTicketUpdates) until after releasing the ticket lock. This creates a small window for an off-thread to invoke processTicketUpdates() and steal the update. When the update is stolen, the full chunk status update (if any) will be eventually queued to execute via the chunk task queue. If the chunk queue is processed during the server tick at any point other than the ChunkHolderManager tick, then any ticket level decrease will violate an important invariant in the Moonrise chunk system: ticket level decreases only occur during ChunkHolderManager tick. This invariant exists to make interfacing with the chunk system easier, especially working with off-thread contexts. This change is specifically made to work towards fixing https://github.com/PaperMC/Folia/issues/363