I spotted two places where under stress (many explosions) luajit would
end up passing nil to these functions. I'm not entirely sure how,
but it seems good form to guard against it, which does make it
more robust. After this patch, I'm not able to crash the server. With
many explosions, it may still lag significantly, but always returns
in the end.
local count = item:get_count()
local take_est = math.log(count * count) + math.random(0,4) - 2
while count > 0 do
- local take = math.min(take_est,
+ local take = math.max(1,math.min(take_est,
item:get_count(),
- item:get_stack_max())
+ item:get_stack_max()))
rand_pos(pos, drop_pos, radius)
local obj = minetest.add_item(drop_pos, item:get_name() .. " " .. take)
if obj then
local count = stack:get_count()
if count > most then
most = count
- texture = minetest.registered_nodes[name].tiles[1]
+ local def = minetest.registered_nodes[name]
+ if def and def.tiles and def.tiles[1] then
+ texture = def.tiles[1]
+ end
end
end