unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Stefan Monnier <monnier@iro.umontreal.ca>
To: Dmitry Antipov <dmantipov@yandex.ru>
Cc: emacs-devel@gnu.org
Subject: Re: [Emacs-diffs] /srv/bzr/emacs/trunk r109890: Do not mark objects from deleted buffers, windows and frames.
Date: Thu, 06 Sep 2012 08:52:40 -0400	[thread overview]
Message-ID: <jwvvcfruy1m.fsf-monnier+emacs@gnu.org> (raw)
In-Reply-To: <504848D0.4020908@yandex.ru> (Dmitry Antipov's message of "Thu, 06 Sep 2012 10:55:12 +0400")

> IMHO such an operations shouldn't make any assumptions about internal
> fields of the deleted objects.  The only possible exception is NILP
> (obj->field) since this may be used to distinguish between live and
> dead objects (as we have now for the buffers and windows).

No, there can be perfectly valid reasons to access
a deleted/killed object.

>> E.g. you might still be able to get (window|frame)-parameters of
>> a deleted (window|frame).
> I'm pretty sure that this is invalid and should be fixed.

I don't see anything that needs fixing here.  On the contrary.  It can
be very useful to keep a reference to a frame/window, and when you need
to display data, see if it's still live, and if not create a new one,
initializing some of its parameters from the old deleted one.

> The only important exception is saving/restoring window configurations.
> Strictly speaking, if the window configuration is recorded in
> saved_window_data, such a window is not deleted.  Ideally, struct
> window should have a bit indicating that it's configuration is
> recorded so such a window can be distinguished from the really dead
> windows;

In 99% of the cases, it's easy to distinguish: one can be GC'd and the
other can't.

>> IOW, it adds lines of code, makes the invariants more complex (in ways
>> which I'm not sure is currently ensured by the rest of the code) and the
>> benefits aren't obvious at all.
> Hm.  For example, killed buffers may sit in all_buffers for a while,
> and still have from tens to thousands reachable objects per buffer
> (although I didn't check whether these objects are reachable only from
> this dead buffer).

So, that's the problem you're attacking.  Fine, but please:
1- Check how much extra data is really kept live because of this.
   As you mention, it may be a lot less than it appears at first.
2- Check how much longer it's kept alive.
4- Check which fields of the buffer keep that data alive.
3- Check why the buffer itself is kept alive: maybe the better fix is to make
   it so the buffer can be GC'd.

>> I don't think scanning those objects can take a noticeable amount of
>> time, so the only potential issue is holding on to data that can never
>> be used again, in which case I'd much prefer changing
>> kill-buffer/delete-(window|frame) so they set the various fields to
>> NULL/nil.  Which is a much safer change.

> I agree about the safety, but:
> 1) this is slower;

Yes, it could be slower, tho I expect there are only a few slots that
would need such a treatment, so I don't think it would be noticeable.

> 2) IMHO this is conceptually wrong and

I strongly disagree.  I think you have an incorrect understanding of
what a "deleted/killed" object is.  It really isn't dead at all.

> 3) it still has it's own traps.

Obviously, we don't want to NULL/nil all fields blindly.  We want to do
it parsimoniously, so that we only do it for fields which we know can
safely be set this way, and ideally only for fields which do hold on to
too much data (e.g. not for fields which only contain numbers anyway).


        Stefan



  parent reply	other threads:[~2012-09-06 12:52 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <E1T9II0-0005q4-Gh@vcs.savannah.gnu.org>
2012-09-05 18:24 ` [Emacs-diffs] /srv/bzr/emacs/trunk r109890: Do not mark objects from deleted buffers, windows and frames Stefan Monnier
2012-09-05 19:15   ` Stefan Monnier
2012-09-06  6:55   ` Dmitry Antipov
2012-09-06  7:00     ` Herring, Davis
2012-09-06  7:28     ` martin rudalics
2012-09-06  9:57       ` Dmitry Antipov
2012-09-06 14:42         ` martin rudalics
2012-09-06 12:53       ` Stefan Monnier
2012-09-06 14:42         ` martin rudalics
2012-09-06 12:52     ` Stefan Monnier [this message]
2012-09-06 14:42       ` martin rudalics
2012-09-06 17:33         ` Stefan Monnier
2012-09-07  9:52           ` martin rudalics
2012-09-06 17:06       ` Dmitry Antipov
2012-09-06 17:37         ` Stefan Monnier
2012-09-07  9:53           ` martin rudalics
2012-09-07 15:19             ` Stefan Monnier
2012-09-10  9:46             ` Reachable killed buffers [Was: Re: [Emacs-diffs] /srv/bzr/emacs/trunk r109890: Do not mark objects from deleted buffers, windows and frames] Dmitry Antipov
2012-09-10 13:25               ` Stefan Monnier
2012-09-10 15:15                 ` Reachable killed buffers Dmitry Antipov
2012-09-10 20:15                   ` Stefan Monnier
2012-09-10 21:10                     ` Stefan Monnier
2012-09-11  5:25                     ` Dmitry Antipov
2012-09-11 13:06                       ` Stefan Monnier
2012-09-12  8:09                       ` martin rudalics
2012-09-12 13:47                         ` Paul Eggert
2012-09-12 13:59                           ` Dmitry Antipov
2012-09-12 14:05                             ` Paul Eggert
2012-09-12 14:15                               ` martin rudalics
2012-09-12 15:59                                 ` Dmitry Antipov
2012-09-12 17:37                                   ` martin rudalics
2012-09-12 17:55                                   ` Paul Eggert
2012-09-13  3:29                                     ` Stefan Monnier
2012-09-13  4:43                                       ` Paul Eggert
2012-09-13  5:00                                         ` Dmitry Antipov
2012-09-13  5:18                                           ` Paul Eggert
2012-09-13 12:47                                         ` Stefan Monnier
2012-09-13 16:49                                         ` martin rudalics
2012-09-13 17:11                                           ` Paul Eggert
2012-09-13 17:30                                             ` martin rudalics
2012-09-14 12:10                                               ` Dmitry Antipov
2012-09-14 13:29                                                 ` Stefan Monnier
2012-09-14 13:38                                                 ` martin rudalics
2012-09-13 18:01                                             ` Dmitry Antipov
2012-09-06  7:20   ` [Emacs-diffs] /srv/bzr/emacs/trunk r109890: Do not mark objects from deleted buffers, windows and frames martin rudalics

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=jwvvcfruy1m.fsf-monnier+emacs@gnu.org \
    --to=monnier@iro.umontreal.ca \
    --cc=dmantipov@yandex.ru \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).