From: Eli Zaretskii <eliz@gnu.org>
To: Helmut Eller <eller.helmut@gmail.com>
Cc: gerd.moellmann@gmail.com, emacs-devel@gnu.org
Subject: Re: MPS: scroll-bars
Date: Tue, 07 May 2024 15:56:00 +0300 [thread overview]
Message-ID: <86wmo5aihr.fsf@gnu.org> (raw)
In-Reply-To: <87r0eeyx2v.fsf@gmail.com> (message from Helmut Eller on Tue, 07 May 2024 08:07:04 +0200)
> From: Helmut Eller <eller.helmut@gmail.com>
> Cc: Gerd Möllmann <gerd.moellmann@gmail.com>,
> emacs-devel@gnu.org
> Date: Tue, 07 May 2024 08:07:04 +0200
>
> On Mon, May 06 2024, Eli Zaretskii wrote:
>
> >> > Btw, did we decide what to do with these chains:
> >> >
> >> > struct frame
> >> > {
> >> > [...]
> >> > /* List of scroll bars on this frame.
> >> > Actually, we don't specify exactly what is stored here at all; the
> >> > scroll bar implementation code can use it to store anything it likes.
> >> > This field is marked by the garbage collector. It is here
> >> > instead of in the `device' structure so that the garbage
> >> > collector doesn't need to look inside the window-system-dependent
> >> > structure. */
> >> > Lisp_Object scroll_bars;
> >> > Lisp_Object condemned_scroll_bars;
> >> >
> >> > They are doubly-linked lists via the ->next and ->prev fields in the C
> >> > 'struct scroll_bar', in X as well as w32, see XSCROLL_BAR. The
> >> > Lisp_Object's above are the last scroll bar on the frame's windows,
> >> > and the rest are reachable via the ->next and ->prev pointers. Do we
> >> > need to do anything about those ->next and ->prev pointers?
> [...]
> > Helmut, WDYT about the scroll bars on X (and by extension on w32)?
>
> On X, the struct scroll_bar is allocated as a PVEC_OTHER pseudovector.
Likewise on w32.
> And I think the next/prev links are traced because of that.
> xterm.c:mark_xterm doesn't do anything special for scrollbars, so I
> think it's all covered.
So any C pointers within a Lisp object allocated via MPS are
automatically traced and fixed when the object is moved?
> The only complication so far was that a struct
> scroll_bar* was handed to GTK that was not traced; after I turned that
> into a root with a pointer to the scroll_bar* it is traced.
Is this the only/best way of making a structure pinned? If there are
others, what are they? I wonder if there's a more elegant technique
than to use indirection. E.g., can't I tell MPS somehow that a Lisp
object allocated as PVEC_OTHER pseudovector is pinned?
See, on w32 the pointer to 'struct scroll_bar' is handed to the UI
thread (via a message with parameters), which uses it to tell the
MS-Windows GUI system how to create the scroll bar (which is just a
special kind of window, as far as MS-Windows is concerned). So I
think the 'struct scroll_bar' must not be allowed to be moved on w32,
because if it does, the UI thread will dereference invalid pointers.
next prev parent reply other threads:[~2024-05-07 12:56 UTC|newest]
Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-03 8:53 MPS image cache Gerd Möllmann
2024-05-03 10:58 ` Helmut Eller
2024-05-03 11:05 ` Po Lu
2024-05-03 11:22 ` Gerd Möllmann
2024-05-03 11:43 ` Gerd Möllmann
2024-05-03 13:24 ` Gerd Möllmann
2024-05-03 17:02 ` Gerd Möllmann
2024-05-04 4:38 ` MPS: scroll-bars (was: MPS image cache) Helmut Eller
2024-05-04 5:22 ` MPS: scroll-bars Gerd Möllmann
2024-05-04 5:29 ` Gerd Möllmann
2024-05-04 5:50 ` Po Lu
2024-05-04 6:27 ` Helmut Eller
2024-05-04 6:45 ` Gerd Möllmann
2024-05-04 7:05 ` Helmut Eller
2024-05-04 7:13 ` Gerd Möllmann
2024-05-04 7:48 ` Gerd Möllmann
2024-05-04 7:09 ` Gerd Möllmann
2024-05-04 8:47 ` Eli Zaretskii
2024-05-04 9:13 ` Gerd Möllmann
2024-05-04 9:29 ` Eli Zaretskii
2024-05-04 10:04 ` Gerd Möllmann
2024-05-04 13:59 ` MPS: w32 threads Eli Zaretskii
2024-05-04 14:20 ` Gerd Möllmann
2024-05-05 8:27 ` Eli Zaretskii
2024-05-05 9:16 ` Gerd Möllmann
2024-05-05 14:39 ` Eli Zaretskii
2024-05-05 15:23 ` Gerd Möllmann
2024-05-05 15:26 ` Gerd Möllmann
2024-05-04 8:29 ` MPS: scroll-bars Po Lu
2024-05-05 4:52 ` Gerd Möllmann
2024-05-05 7:53 ` Helmut Eller
2024-05-05 8:01 ` Gerd Möllmann
2024-05-05 8:08 ` Helmut Eller
2024-05-05 16:43 ` Eli Zaretskii
2024-05-05 18:02 ` Helmut Eller
2024-05-05 18:09 ` Eli Zaretskii
2024-05-06 15:05 ` Eli Zaretskii
2024-05-06 15:53 ` Gerd Möllmann
2024-05-06 18:25 ` Eli Zaretskii
2024-05-07 6:07 ` Helmut Eller
2024-05-07 12:56 ` Eli Zaretskii [this message]
2024-05-07 16:27 ` Helmut Eller
2024-05-03 14:59 ` MPS image cache Helmut Eller
2024-05-03 15:11 ` Gerd Möllmann
2024-05-05 6:45 ` Gerd Möllmann
2024-05-05 7:02 ` Gerd Möllmann
2024-05-05 9:00 ` Eli Zaretskii
2024-05-05 9:31 ` Gerd Möllmann
2024-05-05 10:24 ` Eli Zaretskii
2024-05-05 10:36 ` Gerd Möllmann
2024-05-05 11:01 ` Eli Zaretskii
2024-05-05 12:55 ` Gerd Möllmann
2024-05-05 14:07 ` Eli Zaretskii
2024-05-05 14:32 ` Gerd Möllmann
2024-05-05 15:49 ` Eli Zaretskii
2024-05-05 16:19 ` Gerd Möllmann
2024-05-05 17:45 ` Gerd Möllmann
2024-05-05 18:04 ` Eli Zaretskii
2024-05-05 18:13 ` Eli Zaretskii
2024-05-05 18:35 ` Gerd Möllmann
2024-05-05 19:18 ` Eli Zaretskii
2024-05-05 19:57 ` Gerd Möllmann
2024-05-05 8:16 ` Helmut Eller
2024-05-05 8:42 ` Gerd Möllmann
2024-05-06 14:16 ` Helmut Eller
2024-05-06 14:28 ` Gerd Möllmann
2024-05-03 15:02 ` Helmut Eller
2024-05-04 17:51 ` Gerd Möllmann
2024-05-03 11:04 ` Eli Zaretskii
2024-05-03 11:08 ` 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=86wmo5aihr.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).