On Mon, Apr 6, 2015 at 3:28 PM, Yuriy Taraday <yorik....@gmail.com> wrote: > On Mon, Apr 6, 2015 at 3:48 PM Maciej Fijalkowski <fij...@gmail.com> wrote: >> >> maybe we should add something along those lines to FAQ >> >> http://emptysqua.re/blog/pypy-garbage-collection-and-a-deadlock/ > > > Can't it be fixed? I see 2 possible solutions here: > 1. We can detect deadlock (any lock contention during GC round will become > deadlock) and bail out of GC round early to try again later or skip freeing > this object (and mark all objects referenced by it). > 2. We can defer all calls to __del__ until after GC round and run them in a > separate Python thread which would allow them to yield processing to let > other threads free some lock. > > I know that either of these solutions would change semantics a bit, but it > shouldn't affect user's code.
as you can see from the blog post *any* change does affect user code. Note that finalizers are not called during GC, but at some later "safer" stage, where all the internals are in a sane state. Not sure how you would do 1, really (a global flag on locks?), 2 is something Java does. General FAQ entry should say "avoid __del__ doing any substantial job at any cost" I would think, whacking at locks is like lipstick on a pig. _______________________________________________ pypy-dev mailing list pypy-dev@python.org https://mail.python.org/mailman/listinfo/pypy-dev