emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Reachable killed buffers


From: Stefan Monnier
Subject: Re: Reachable killed buffers
Date: Tue, 11 Sep 2012 09:06:52 -0400
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.2.50 (gnu/linux)

> IIUC both BLVs and frame/window buffer lists aren't shared. So, marking
> traversal which sees an owner symbol/frame/window for the first time
> sees these objects for the first time too (thus mark them correctly).
> And even we change buffer list or BLV so the marked object becomes
> unreachable, we just create some floating garbage which survives current
> GC but will be reclaimed during the next one.

The part where it gets less obvious is that swap_in_global_binding
doesn't only modify the BLV struct but also the C variable pointed to by
the `fwd' field and that variable is marked from elsewhere (staticpro,
for example).
As I said, I still think it's safe because we know the values we assign
there will be marked "real soon now" (via the "mark_object
(blv->defcell)" for example).

BTW, the "FIXME: make sure it's safe during GC." you placed before the
call to swap_in_global_binding should be turned into a "BEWARE: this is
called during GC, so make sure we ..." placed within swap_in_global_binding.

>> I don't see any reason to remove the previous comment since the change
>> doesn't affect its validity.
> IIUC this comment is partially invalid since lisp.h comment says that
> Lisp_Buffer_Local_Value can't be forwarded to buffer or kboard object
> (and this is really so).

Good point, yes, thanks for updating the comment.


        Stefan



reply via email to

[Prev in Thread] Current Thread [Next in Thread]