hump
hump copied to clipboard
bug
A bug occurs when adding from inside a loop.
signal.register(AAA, function() .... signal.register(AAA, ...) .... end) signal.emit(AAA)
timer.after(1.0, function() ... timer.after(1.0, ...) ... end)
What is the error message?
Can you please give more information? What did you expect and what did you get instead? Your example ...
signal.register("slot", function()
print("Foo")
signal.register("slot", function() print("Bar") end)
print("Baz")
end)
signal.emit("slot")
... Works as expected:
Foo
Baz
Bar
The timer example also works as expected:
timer.after(1, function()
print("Foo")
timer.after(1, function()
print("Bar")
end)
end)
timer.update(1) --> Foo
timer.update(1) --> Bar
signal = require("signal")
function register()
signal.register(1, function()
print("Foo")
signal.register(1, function() print("Bar") end)
print("Baz")
end)
end
for i=1, 10 do
register()
signal.emit(1)
signal.clear(1)
print("---")
end
(LuaJIT 2.0.5)
luajit.exe test.lua
Foo
Baz -- <<--- I think this is right. Because Bar is register after emit.
---
Foo
Baz
---
Foo
Baz
---
Foo
Baz
---
Foo
Baz
Bar
---
Foo
Baz
Bar
---
Foo
Baz
---
Foo
Baz
---
Foo
Baz
Bar
---
Foo
Baz
Bar
---
(lua 5.1.4)
lua5.1.exe test.lua
Foo
Baz
Bar
---
Foo
Baz
Bar
---
Foo
Baz
Bar
---
Foo
Baz
Bar
---
Foo
Baz
Bar
---
Foo
Baz
Bar
---
Foo
Baz
Bar
---
Foo
Baz
Bar
---
Foo
Baz
Bar
---
Foo
Baz
Bar
---
(I'm sorry, My English is not good)
more sample
signal = require("signal")
function test1(mode)
print("Foo")
signal.register(1, function() print("Bar") end)
print("Baz")
end
function register()
signal.register(1, test1)
signal.register(1, function() end)
signal.register(1, function() end)
signal.register(1, function() end)
end
for i=1,10 do
register()
signal.emit(1)
signal.clear(1)
print("---")
end
luajit.exe test.lua
Foo
Baz
Bar
Foo --<< call twice
Baz
---
Foo
Baz
Foo
Baz
---
Foo
Baz
Bar
---
Foo
Baz
Foo
Baz
---
Foo
Baz
Foo
Baz
---
Foo
Baz
Bar
Foo
Baz
---
Foo
Baz
Bar
Foo
Baz
---
Foo
Baz
Foo
Baz
---
Foo
Baz
Foo
Baz
---
Foo
Baz
Bar
Foo
Baz
---
lua5.1.exe test.lua
Foo
Baz
Bar
---
Foo --<<
Baz
---
Foo --<<
Baz
---
Foo
Baz
Bar
---
Foo --<<
Baz
---
Foo
Baz
Bar
---
Foo
Baz
---
Foo
Baz
Bar
---
Foo
Baz
Bar
---
Foo --<<
Baz
---
Timer
timer = require("timer")
function register()
timer.after(0.5, function()
print("Foo")
-- Bar total 1 second
timer.after(0.5, function() print("Bar") end)
print("Baz")
end)
timer.after(0.5, function() end)
timer.after(0.5, function() end)
timer.after(0.5, function() end)
end
for i=1,10 do
register()
timer.update(0.5)
timer.clear()
print("---")
end
luajit.exe test3.lua
Foo
Baz
Bar -- Bar 1 sec but call 0.5 sec
---
Foo
Baz
Bar
---
Foo
Baz
---
Foo
Baz
---
Foo
Baz
Bar
---
Foo
Baz
Bar
---
Foo
Baz
Bar
---
Foo
Baz
Bar
---
Foo
Baz
Bar
---
Foo
Baz
Bar
---
lua5.1.exe test3.lua
Foo
Baz
---
Foo
Baz
---
Foo
Baz
Bar
---
Foo
Baz
Bar
---
Foo
Baz
Bar
---
Foo
Baz
Bar
---
Foo
Baz
Bar
---
Foo
Baz
Bar
---
Foo
Baz
Bar
---
Foo
Baz
Bar
---