[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: How to traverse a weak table safely?
- From: Christian Vogler <Christian.Vogler@...>
- Date: Thu, 2 Sep 2004 08:59:53 -0400
On Thursday 02 September 2004 08:13 am, Michael Roth wrote:
> I don't know a solution to prevent this problem. I didn't found a way to
> lock the weak table in someway. Setting __mode to nil doesn't help.
>
> Any ideas?
The short answer is, don't iterate over a weak table. Semantically, this is
problematic, because during a traversal you simply have no way of predicting
whether references are still valid. If I remember correctly, the Lua list
archives will turn up plenty of hits on this topic.
This problem is not restricted to the Lua language, BTW. Other languages with
weak references, notably Java, have the same problem, as well. The one nice
thing about Java is that if a weak hash table is modified as the result of a
GC during the traversal, you will get an exception instead of silent
undefined behavior.
If you need to iterate over a table of objects and do something with them,
then you almost certainly will want to store them as normal references, and
have a registration/deregistration mechanism to add and remove entries from
this table.
- Christian