forked from minetest/minetest_game
TNT: Fix up nil derefs
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.
This commit is contained in:
parent
da5f4a939e
commit
0736d30e33
@ -51,9 +51,9 @@ local function eject_drops(drops, pos, radius)
|
|||||||
local count = item:get_count()
|
local count = item:get_count()
|
||||||
local take_est = math.log(count * count) + math.random(0,4) - 2
|
local take_est = math.log(count * count) + math.random(0,4) - 2
|
||||||
while count > 0 do
|
while count > 0 do
|
||||||
local take = math.min(take_est,
|
local take = math.max(1,math.min(take_est,
|
||||||
item:get_count(),
|
item:get_count(),
|
||||||
item:get_stack_max())
|
item:get_stack_max()))
|
||||||
rand_pos(pos, drop_pos, radius)
|
rand_pos(pos, drop_pos, radius)
|
||||||
local obj = minetest.add_item(drop_pos, item:get_name() .. " " .. take)
|
local obj = minetest.add_item(drop_pos, item:get_name() .. " " .. take)
|
||||||
if obj then
|
if obj then
|
||||||
@ -165,7 +165,10 @@ local function add_effects(pos, radius, drops)
|
|||||||
local count = stack:get_count()
|
local count = stack:get_count()
|
||||||
if count > most then
|
if count > most then
|
||||||
most = count
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user