Description
Describes
Fix the compatibility between c2mef and Twilight Forest, while fixing bugs and improving performance
Fixed
Thread Safety Fixes
Fixed race condition in
ConcurrentFlagMatrix.setif()- Location:
c2me_fixes_worldgen_threading_issues/.../ConcurrentFlagMatrix.java - Issue: Race condition between read and write locks in
setif()method - Solution: Use write lock throughout the entire operation for atomicity
- Location:
Prevented potential deadlocks in lock acquisition
- Location:
c2me_base/.../AsyncCombinedLock.java,SchedulingAsyncCombinedLock.java - Issue: Unordered lock acquisition could cause deadlocks
- Solution: Sort lock names to ensure consistent acquisition order
- Location:
Fixed infinite recursion in error handling
- Location:
AsyncCombinedLock.java,SchedulingAsyncCombinedLock.java - Issue: Recursive calls in error path could cause stack overflow
- Solution: Throw
IllegalStateExceptioninstead of recursing
- Location:
Enhanced object pool safety
- Location:
c2me_base/.../SimpleObjectPool.java - Added: Null checks and object state cleanup before return to pool
- Location:
Changed
Error Handling Improvements
Replaced printStackTrace() with proper logging
- Location:
SchedulingAsyncCombinedLock.java,NeighborLockingTask.java,NoTickSystem.java,MixinChunkStatus.java,C2MEMod.java - Changed: Use SLF4J Logger instead of stack trace printing / System.out.printf for better log management
- Location:
Added ForkJoinPool compatibility
- Location:
c2me_fixes_chunkio_threading_issues/.../SynchronizedCodec.java - Added:
ManagedBlockersupport to prevent ForkJoinPool thread starvation
- Location:
Performance
Chunk Generation Speed Optimizations
Aggressive spin-wait strategy for ultra-low latency
- Location:
c2me_base/.../CFUtil.java - Optimization: 10,000 pure spins + 1ns park to minimize thread context switching
- Effect: Minimized task completion wait time
- Location:
High-throughput I/O thread optimization
- Location:
c2me_rewrites_chunkio/.../C2MEStorageThread.java - Optimization: 10,000 spins + 100ns park, optimized read request processing
- Effect: Maximized disk I/O throughput
- Location:
Scheduler batch processing optimization
- Location:
c2me_base/.../SchedulingManager.java - Optimization: Removed unused timing code, immediate rescheduling in finally block, batch task scheduling
- Effect: Keep scheduler running at full capacity
- Location:
Priority queue fast path
- Location:
c2me_base/.../DynamicPriorityQueue.java - Added:
isEmpty()method for O(1) fast checking - Effect: Reduced queue checking overhead
- Location:
Optimized lock checking in NeighborLockingTask
- Location:
c2me_base/.../NeighborLockingTask.java - Optimization: Use indexed for loop instead of enhanced for loop, cache array length
- Effect: Reduced allocation and improved loop performance
- Location:
Optimized priority distance calculation
- Location:
c2me_base/.../SchedulingManager.java - Optimization: Use long-based Chebyshev distance calculation instead of creating ChunkPos objects
- Effect: Reduced object allocation during priority updates
- Location:


