all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: martin rudalics <rudalics@gmx.at>
To: Juri Linkov <juri@linkov.net>
Cc: 33458@debbugs.gnu.org
Subject: bug#33458: 27.0.50; dired loses position when reverted from outside place
Date: Fri, 14 Dec 2018 10:33:52 +0100	[thread overview]
Message-ID: <5C137900.7010704@gmx.at> (raw)
In-Reply-To: <5C12200E.8060609@gmx.at>

 > The downside of such an approach is that any buffer-local reference to
 > a window will assure that the window object cannot be reclaimed by the
 > collector as long as the buffer is live, even when the window is not
 > stored in a configuration any more.  Not that I consider this a great
 > downside though.

Reconsidering ...

Imagine a scenario where a user (1) displays a buffer in new window,
(2) switches in that window to another buffer and (3) deletes that
window for good.  When and how would the buffer-local reference
created in (2) be removed?

It can't be done in (3) since a window configuration stored somewhere
might still need it.  But if there is no such configuration, it should
be eventually removed since otherwise such references may pile up and
inhibit reclamation of all associated window objects.  Unfortunately,
there's no way to find out if such a configuration exists.  Obviously,
when the buffer gets eventually killed, its local variables get killed
too and the reference will vanish.  But in a long session many buffers
may be kept around for a long time and every time the above scenario
repeats itself a new reference will be added.

The only way to solve this dilemma I can see is using the collector.
For this, any reference created in a step like (2) would have to be
considered weak, that is, would not be be marked from the buffer-local
list.  When the collector sweeps buffers, it would have to perform an
extra check on that list: If the corresponding window was not marked
so far, it would be considered definitely dead, the reference get
removed from that list and the window be reclaimed in the subsequent
vector sweep.

As if things were not already complicated enough, any access to that
list (needed when reverting a buffer to update the point position for
every window showing the buffer in the past) would then have to be
atomic (not allocating) to avoid that the collector reclaims a window
under the feet of such an update operation.

Finally, this would not help wrt window states because these do not
care about window objects in the first place.  So I think that
implementing a scheme based on buffer-local window references is
hardly feasible.

Admittedly, GC should do something similar when sweeping window
configurations since these may still hold references to killed buffer
objects and thus prevent their reclamation.  But that would be fairly
simple since a buffer that has been killed will remain killed forever.
OTOH, a window that has been deleted may remain in a zombie-like state
until the last configuration referencing it has been removed.

martin





  reply	other threads:[~2018-12-14  9:33 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-21 20:40 bug#33458: 27.0.50; dired loses position when reverted from outside place v88m
2018-11-21 22:33 ` Stephen Berman
2018-11-22  9:07   ` v88m
2018-11-22  9:38     ` Stephen Berman
2018-11-23  7:41     ` martin rudalics
2018-11-23 15:40       ` v88m
2018-11-23 19:03         ` martin rudalics
2018-11-23 19:55           ` v88m
2018-11-25 20:45           ` Juri Linkov
2018-11-26  9:32             ` martin rudalics
2018-11-27  0:09               ` Juri Linkov
2018-11-27  8:08                 ` martin rudalics
2018-11-28  0:06                   ` Juri Linkov
2018-11-28  8:35                     ` martin rudalics
2018-11-28 23:45                       ` Juri Linkov
2018-11-29  7:41                         ` Eli Zaretskii
2018-11-29 22:33                           ` Juri Linkov
2018-11-30  7:05                             ` v88m
2018-12-01 22:33                               ` Juri Linkov
2018-11-30  8:21                             ` martin rudalics
2018-11-29  8:31                         ` martin rudalics
2018-11-29 22:46                           ` Juri Linkov
2018-11-30  7:10                             ` v88m
2018-11-30  8:22                               ` martin rudalics
2018-11-30  8:21                             ` martin rudalics
2018-12-01 22:30                               ` Juri Linkov
2018-12-02  8:33                                 ` martin rudalics
2018-12-04  8:33 ` martin rudalics
2018-12-04 14:41   ` v88m
2018-12-05  9:17     ` martin rudalics
2018-12-08  9:41       ` martin rudalics
2018-12-10  0:10         ` Juri Linkov
2018-12-10  7:58           ` martin rudalics
2018-12-10 23:59             ` Juri Linkov
2018-12-11  8:34               ` martin rudalics
2018-12-12  0:40                 ` Juri Linkov
2018-12-12  8:32                   ` martin rudalics
2018-12-12 23:29                     ` Juri Linkov
2018-12-13  9:02                       ` martin rudalics
2018-12-14  9:33                         ` martin rudalics [this message]
2018-12-16 23:49                           ` Juri Linkov
2018-12-17  8:06                             ` martin rudalics
2018-12-18  0:25                               ` Juri Linkov
2018-12-18  8:28                                 ` martin rudalics
2018-12-21  0:59                                   ` Juri Linkov
2018-12-21  9:15                                     ` martin rudalics
2018-12-22 23:36                                       ` Juri Linkov
2018-12-23  9:40                                         ` martin rudalics
2018-12-23 19:06                                           ` martin rudalics
2018-12-23 23:47                                             ` Juri Linkov
2018-12-24  8:15                                               ` martin rudalics
2018-12-25 21:25                                                 ` Juri Linkov
2018-12-26  9:42                                                   ` martin rudalics
2018-12-27  0:29                                                     ` Juri Linkov
2018-12-27  9:37                                                       ` martin rudalics
2020-08-22 14:49                                                         ` Lars Ingebrigtsen
2020-08-23 18:42                                                           ` Juri Linkov
2020-08-24 13:15                                                             ` Lars Ingebrigtsen
2018-12-13  7:39   ` v88m
2018-12-13  9:02     ` martin rudalics
2018-12-13  9:35       ` v88m
2018-12-13 10:10         ` martin rudalics
2018-12-14  8:25           ` v88m
2018-12-14  9:34             ` martin rudalics
2018-12-14 10:01               ` v88m

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

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

  git send-email \
    --in-reply-to=5C137900.7010704@gmx.at \
    --to=rudalics@gmx.at \
    --cc=33458@debbugs.gnu.org \
    --cc=juri@linkov.net \
    /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 external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.