Buffer ORDER_CHANNEL messages in craftItem function to avoid re-queue bounce

This commit is contained in:
MayaTheShy
2026-03-22 02:52:30 -04:00
parent 187b0276d1
commit deeb70ba0d

View File

@@ -1173,6 +1173,7 @@ local function craftItem(recipeIdx)
log.info("CRAFT", "Waiting for turtle reply (timeout: %ds)...", CRAFT_TIMEOUT)
local deadline = os.clock() + CRAFT_TIMEOUT
local result = nil
local bufferedMessages = {} -- Buffer ORDER_CHANNEL messages to avoid re-queue bounce
while os.clock() < deadline do
local timerId = os.startTimer(math.max(0.1, deadline - os.clock()))
@@ -1185,14 +1186,19 @@ local function craftItem(recipeIdx)
result = message
break
elseif channel == ORDER_CHANNEL then
-- Re-queue so Task 12 picks it up after craftItem returns
os.queueEvent(event, p1, p2, p3, p4, p5)
-- Buffer for re-queue after loop exits (avoids bounce loop)
table.insert(bufferedMessages, {event, p1, p2, p3, p4, p5})
end
elseif event == "timer" and p1 == timerId then
-- Timeout tick, loop will check deadline
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
needsRedraw = true
smelterNeedsRedraw = true