From: Pip Cet <pipcet@gmail.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 21380@debbugs.gnu.org
Subject: bug#21380: 25.0.50; GTK-induced segfault when scheduling timer from window-configuration-change-hook
Date: Sun, 30 Aug 2015 20:56:33 +0000 [thread overview]
Message-ID: <CAOqdjBf_BMvcSW3szDd+KJpGR90EzrVWv4QhYVxWyMoVOm_x=g@mail.gmail.com> (raw)
In-Reply-To: <83h9ng1ryx.fsf@gnu.org>
[-- Attachment #1: Type: text/plain, Size: 2252 bytes --]
On Sun, Aug 30, 2015 at 7:44 PM, Eli Zaretskii <eliz@gnu.org> wrote:
> > I'm not sure I understand. This issue is happening while the temporary
> copy is
> > being created, not afterwards, IIUC.
>
> Then all we have to do is block QUIT during that copy, no?
Yes for this particular segfault.
No* for similar segfaults that I think pose equally severe problems: if any
other function calls concat/copy-sequence on data that is modified by
window-configuration-change-hook, it should* still be possible to produce
the segfault. So it wouldn't even be safe for
window-configuration-change-hook to add a timer to the timer list, because
the outer frame might be in the middle of creating a copy of the timer list
for some Lisp code that hasn't blocked input. (As in my example below)
I really don't think QUIT should run any Lisp hooks, to be honest. From the
point of view of the Lisp user (and the not-totally-careful C user, as in
this case), that might make them happen at any time, and all kinds of race
conditions would occur instead. Maybe this is a matter for emacs-devel?
If I'm wrong and QUIT should be able to run Lisp hooks, concat needs to be
fixed not to rely on its argument's size being unchanged after the
make_sequence call.
*-I have been able to verify this segfault by interrupting the program at
just the right time and resizing its X window then:
- gdb --args emacs -Q
- evaluate the following code:
(run-with-timer 0 1 #'ignore) ;; so the timer list isn't empty
(add-hook 'window-configuration-change-hook (lambda () (run-with-timer 0
nil #'ignore)))
(while t
(copy-sequence timer-list)
(accept-process-output nil 0)
)
- interrupt and set a breakpoint with "b Fmake_sequence if
!input_blocked_p()".
- wait for breakpoint to be hit, verify that concat's args[0] is equal to
Vtimer_list.
- resize the X window
- continue in gdb
- segfault
As far as I can tell, that should be reproducible. Also as far as I can
tell, it's merely a matter of luck that an X resize doesn't happen at the
point where I interrupted the program to artificially trigger the segfault.
However, I admit that it is a separate issue, less likely to occur in
practice, and I'll open another bug for it if that's the way you prefer
things.
[-- Attachment #2: Type: text/html, Size: 3050 bytes --]
next prev parent reply other threads:[~2015-08-30 20:56 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-30 12:51 bug#21380: 25.0.50; GTK-induced segfault when scheduling timer from window-configuration-change-hook Pip Cet
2015-08-30 15:01 ` Eli Zaretskii
2015-08-30 15:24 ` Pip Cet
2015-08-30 15:27 ` Pip Cet
2015-08-30 16:24 ` Pip Cet
2015-08-30 18:10 ` martin rudalics
2015-08-30 18:20 ` Pip Cet
2015-08-30 19:50 ` Eli Zaretskii
2015-08-30 18:59 ` Pip Cet
2015-08-31 9:20 ` martin rudalics
2015-08-30 16:39 ` Eli Zaretskii
2015-08-30 16:42 ` Pip Cet
2015-08-30 19:44 ` Eli Zaretskii
2015-08-30 20:56 ` Pip Cet [this message]
2015-08-30 21:13 ` Pip Cet
2015-08-31 14:31 ` Eli Zaretskii
2015-09-01 10:20 ` Pip Cet
2015-09-01 15:03 ` Eli Zaretskii
2015-09-01 15:22 ` Pip Cet
2015-09-01 16:01 ` Eli Zaretskii
2015-09-01 16:02 ` Pip Cet
2015-09-01 16:23 ` Eli Zaretskii
2015-09-02 7:02 ` martin rudalics
2015-09-02 14:32 ` Eli Zaretskii
2015-09-03 15:36 ` Stefan Monnier
2015-09-05 7:38 ` Eli Zaretskii
2015-09-05 15:18 ` Stefan Monnier
2015-09-05 15:27 ` Eli Zaretskii
2015-09-06 22:11 ` Stefan Monnier
2022-04-29 12:52 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-04-29 13:40 ` Eli Zaretskii
2022-04-29 13:44 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-04-29 15:02 ` Pip Cet
2015-09-05 16:59 ` Pip Cet
2015-09-06 22:22 ` Stefan Monnier
2015-09-08 15:55 ` Pip Cet
2015-09-01 15:14 ` Pip Cet
2015-09-01 16:04 ` Eli Zaretskii
2015-09-01 16:56 ` Pip Cet
2015-09-01 17:19 ` Eli Zaretskii
2015-09-01 20:48 ` Pip Cet
2015-09-02 15:08 ` Eli Zaretskii
2015-09-02 16:09 ` Pip Cet
2015-09-02 19:13 ` Eli Zaretskii
2015-09-02 22:08 ` Pip Cet
2020-09-07 17:07 ` Lars Ingebrigtsen
2020-09-07 17:47 ` Pip Cet
2020-09-07 19:09 ` Eli Zaretskii
2020-09-08 9:57 ` Lars Ingebrigtsen
2022-04-29 12:14 ` Lars Ingebrigtsen
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='CAOqdjBf_BMvcSW3szDd+KJpGR90EzrVWv4QhYVxWyMoVOm_x=g@mail.gmail.com' \
--to=pipcet@gmail.com \
--cc=21380@debbugs.gnu.org \
--cc=eliz@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).