[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Error: invalid key to 'next' (LuaJIT2)
- From: Arseny Vakhrushev <arseny.vakhrushev@...>
- Date: Sun, 27 Jun 2010 01:52:00 +0400
Hello, everyone!
The system I'm running uses LuaJIT2-beta4 (updated in the middle of May or so) as an engine and
executes everything in coroutines. I noticed the "invalid key to 'next'" error during intensive work the
other day. I inspected the code for things like adding to tables while traversing because several
coroutines could overlap: one is traversing while the other is modifying. Ok, that's clear.
However after that, I noticed the above error again in a simple block under high load:
------------------------------------------------------------
local cur = {}
for uid, user in pairs(users) do <--- error appears here!
table.insert(cur, user)
end
------------------------------------------------------------
Here 'users' is the table from which I copy data to 'cur' for next traversal. No metatable is
assigned to it, nothing like that. It is just a table consisting of pairs:
'uid' (string) => {} (table)
As you can see, I don't modify the contents of the table here in this block nor do I call anything
which could yield the current coroutine or trigger a metamethod or anything which could modify the table.
I'm pretty sure it happens not due to memory corruption or anything. The system is very robust and works for
months until a manual restart. Valgrind tests are brilliant on LuaJIT with all debug options turned
on. The size of 'users' was about 1000 entries and the system was executing a lot of requests when the error happened.
Thanks for any clues in advance.
// Seny