Buffer ORDER_CHANNEL messages in craftItem function to avoid re-queue bounce
This commit is contained in:
@@ -1173,6 +1173,7 @@ local function craftItem(recipeIdx)
|
|||||||
log.info("CRAFT", "Waiting for turtle reply (timeout: %ds)...", CRAFT_TIMEOUT)
|
log.info("CRAFT", "Waiting for turtle reply (timeout: %ds)...", CRAFT_TIMEOUT)
|
||||||
local deadline = os.clock() + CRAFT_TIMEOUT
|
local deadline = os.clock() + CRAFT_TIMEOUT
|
||||||
local result = nil
|
local result = nil
|
||||||
|
local bufferedMessages = {} -- Buffer ORDER_CHANNEL messages to avoid re-queue bounce
|
||||||
|
|
||||||
while os.clock() < deadline do
|
while os.clock() < deadline do
|
||||||
local timerId = os.startTimer(math.max(0.1, deadline - os.clock()))
|
local timerId = os.startTimer(math.max(0.1, deadline - os.clock()))
|
||||||
@@ -1185,14 +1186,19 @@ local function craftItem(recipeIdx)
|
|||||||
result = message
|
result = message
|
||||||
break
|
break
|
||||||
elseif channel == ORDER_CHANNEL then
|
elseif channel == ORDER_CHANNEL then
|
||||||
-- Re-queue so Task 12 picks it up after craftItem returns
|
-- Buffer for re-queue after loop exits (avoids bounce loop)
|
||||||
os.queueEvent(event, p1, p2, p3, p4, p5)
|
table.insert(bufferedMessages, {event, p1, p2, p3, p4, p5})
|
||||||
end
|
end
|
||||||
elseif event == "timer" and p1 == timerId then
|
elseif event == "timer" and p1 == timerId then
|
||||||
-- Timeout tick, loop will check deadline
|
-- Timeout tick, loop will check deadline
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Re-queue any buffered ORDER_CHANNEL messages so Task 12 processes them
|
||||||
|
for _, msg in ipairs(bufferedMessages) do
|
||||||
|
os.queueEvent(table.unpack(msg))
|
||||||
|
end
|
||||||
|
|
||||||
activity.crafting = false
|
activity.crafting = false
|
||||||
needsRedraw = true
|
needsRedraw = true
|
||||||
smelterNeedsRedraw = true
|
smelterNeedsRedraw = true
|
||||||
|
|||||||
Reference in New Issue
Block a user