unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: "Gerd Möllmann" <gerd.moellmann@gmail.com>
Cc: emacs-devel@gnu.org, eller.helmut@gmail.com
Subject: Re: MPS: struct window, prev_buffers + next_buffers
Date: Sat, 22 Jun 2024 11:24:56 +0300	[thread overview]
Message-ID: <86y16xiduv.fsf@gnu.org> (raw)
In-Reply-To: <m2pls94cpe.fsf@pro2.fritz.box> (message from Gerd Möllmann on Sat, 22 Jun 2024 10:13:33 +0200)

> From: Gerd Möllmann <gerd.moellmann@gmail.com>
> Cc: emacs-devel@gnu.org,  eller.helmut@gmail.com
> Date: Sat, 22 Jun 2024 10:13:33 +0200
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> >> From: Gerd Möllmann <gerd.moellmann@gmail.com>
> >> Cc: Eli Zaretskii <eliz@gnu.org>, Helmut Eller <eller.helmut@gmail.com>
> >> Date: Sat, 22 Jun 2024 09:24:59 +0200
> >> 
> >> 1. Does igc really have to do something? I don't see something
> >> noticeably growing, even after hours of using Emacs with igc.
> >
> > How many buffers did that session create and delete?  Do you see
> > killed buffers not collected (i.e. buffer objects whose name is nil
> > that are not garbage-collected because the window's prev_buffers or
> > next_buffers list references those killed buffers?  That's what the
> > comment in mark_window says:
> 
> How many buffers get killed is hard to tell.

Can't you write some simple code to count them?  A killed buffer has
its name nil, so it is easy to spot (we also have BUFFER_LIVE_P).  We
also have window-next-buffers and window-prev-buffers that return
these two lists.

> I have usually 50-100 file buffers, which are kind of long-lived,
> plus constantly temp buffers (I guess) that are created by vertico
> and alike.

I think the use case is that you visit a file in a window, and then
kill it after some time.  Do that several times, switching between
buffers in between, and you should have those killed buffers in the
prev_buffers and next_buffers lists of the window.

> Maybe it's because windows aren't long-lived? No idea.

Yes, you should do that in a single window to see the effect, I think.

> >> 4. Note that the loop in the function stops when a cons cell is marked.
> >> So it doesn't always take entries off the list that contain dead
> >> buffers. I don't understand that at all.
> >
> > I guess the cons cell being marked means that someone has a reference
> > to it, and therefore it cannot be GCed?
> 
> But it won't be GC'd anyway, becuase it's marked. And if the buffer in
> the cons is killed, it remains in the list. That makes no sense to me.

But the code doesn't GC buffers, it just removes them from the
prev_buffers and next_buffers lists.  If a cons cell of the list is
marked, removing the buffer (which could subsequently lead to GC'ing
the buffer) might not be expected by the code which uses data that
references that buffer, even though the buffer is killed.



  reply	other threads:[~2024-06-22  8:24 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-22  7:24 MPS: struct window, prev_buffers + next_buffers Gerd Möllmann
2024-06-22  7:58 ` Eli Zaretskii
2024-06-22  8:13   ` Gerd Möllmann
2024-06-22  8:24     ` Eli Zaretskii [this message]
2024-06-22  8:53       ` Gerd Möllmann
2024-06-22  9:50         ` Eli Zaretskii
2024-06-22 10:25           ` Gerd Möllmann

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=86y16xiduv.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=eller.helmut@gmail.com \
    --cc=emacs-devel@gnu.org \
    --cc=gerd.moellmann@gmail.com \
    /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).