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)
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user