From 60c16eb57ba3a3c26ce2ca06ab55b1ba33ae0922 Mon Sep 17 00:00:00 2001
From: Perttu Ahola <celeron55@gmail.com>
Date: Sun, 1 Apr 2012 13:46:46 +0300
Subject: [PATCH] Spread load better in leaf decay trunk caching

---
 mods/default/leafdecay.lua | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/mods/default/leafdecay.lua b/mods/default/leafdecay.lua
index a01fe61..36b6df8 100644
--- a/mods/default/leafdecay.lua
+++ b/mods/default/leafdecay.lua
@@ -10,6 +10,14 @@
 
 default.leafdecay_trunk_cache = {}
 default.leafdecay_enable_cache = true
+-- Spread the load of finding trunks
+default.leafdecay_trunk_find_allow_accumulator = 0
+
+minetest.register_globalstep(function(dtime)
+	local finds_per_second = 5000
+	default.leafdecay_trunk_find_allow_accumulator =
+			math.floor(dtime * finds_per_second)
+end)
 
 minetest.register_abm({
 	nodenames = {"group:leafdecay"},
@@ -48,6 +56,11 @@ minetest.register_abm({
 				table.remove(default.leafdecay_trunk_cache, p0_hash)
 			end
 		end
+		if default.leafdecay_trunk_find_allow_accumulator <= 0 then
+			return
+		end
+		default.leafdecay_trunk_find_allow_accumulator =
+				default.leafdecay_trunk_find_allow_accumulator - 1
 		for dx = -d, d do if do_preserve then break end
 		for dy = -d, d do if do_preserve then break end
 		for dz = -d, d do if do_preserve then break end